/*
 * CRootJFrame.java
 *
 * Copyright (c) 2009 Giles Millward (Manigra). All rights reserved.
 *
 * This file is part of JRogueDPS.
 *
 * JRogueDPS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JRogueDPS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with JRogueDPS.  If not, see <http://www.gnu.org/licenses/>.
 */
package jroguedps;

import dpsinterface.CDPSRaidBuff;
import dpsresults.CDPSResults;
import talents.CRogueTalents;
import dpssystem.CUtil;
import geardatabase.CDatabase;
import geardatabase.CGemType;
import geardatabase.CItemType.ItemType;
import geardatabase.CProcDatabase;
import geardatabase.CStats;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.ItemEvent;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import paperdoll.CDollRenderer;
import paperdoll.CDollSlotType.DollSlotType;
import paperdoll.CDollTableModel;
import paperdoll.CImportArmory;
import paperdoll.CItemChooser;
import paperdoll.CPaperDoll;
import playstyle.CHAT;
import playstyle.CPlayStyle;
import project.CProject;
import raidbuffs.CRaid;
import raidbuffs.CRaid.RaidBuff;
import utility.CMessage;
import utility.CStatus;
import utility.CUtility;


/**
 *
 * @author Mani
 */
public class CRootJFrame extends javax.swing.JFrame {

    CItemChooser l_dialog;
    boolean m_initialising = true;
    boolean m_initialisingPlayStyle = true;
    public CStats m_boostStats = new CStats();
    double m_maxTime = 360;

    /** Creates new form CRootJFrame */
    public CRootJFrame() {
        CGlobal.g_rootFrame = this;
        CGlobal.g_project = new CProject();
        CGlobal.g_paperDoll = new CPaperDoll();
        CGlobal.g_paperDoll.defaultSlots();
        CGlobal.g_jFrame = this;
        CGlobal.g_database = new CDatabase();
        CGlobal.g_raidBuffs = new CRaid();
        CGlobal.g_playStyle = new CPlayStyle();
        CGlobal.g_HAT = new CHAT();
        CGlobal.g_DPSResults = new CDPSResults();

        CGlobal.g_pwd = System.getProperty("user.dir");
        CGemType.initGemImages(getClass().getClassLoader());
        initComponents();
        CGlobal.g_database.linkTables(this.armorDBTable, this.weaponsDBTable, this.gemsDBTable);
        CGlobal.g_HAT.setPartyMember(0, this.hat1ClassComboBox, this.hat1CPSFormattedTextField);
        CGlobal.g_HAT.setPartyMember(1, this.hat2ClassComboBox, this.hat2CPSFormattedTextField);
        CGlobal.g_HAT.setPartyMember(2, this.hat3ClassComboBox, this.hat3CPSFormattedTextField);
        CGlobal.g_HAT.setPartyMember(3, this.hat4ClassComboBox, this.hat4CPSFormattedTextField);
        CGlobal.g_DPSResults.linkGUI(this.resultsDamageTable,
                                     this.procResultsTable,
                                     this.regenResultsTable,
                                     this.poisonDamageLabel,
                                     this.deadlyPoisonStackTimeDamageLabel,
                                     this.overallDamageLabel,
                                     this.iterationPlotPanel,
                                     this.finisherDistributionLabel);
        CStatus.initProgressBar(statusText);
        CStatus.idleStatus();
        CGlobal.g_paperDoll.setTableLink(this.paperDollTable);
        CGlobal.g_playStyle.init(this.murderableCheckBox, this.playStyleTextArea);

        //getDBItems();
        //System.out.println("Saving database");
        //CGlobal.g_database.saveDatabase();

        CGlobal.g_database.readDatabase();
        CGlobal.g_database.addEnchants();
        CGlobal.g_database.addPoisons();
        CGlobal.g_procDatabase = new CProcDatabase();
        CGlobal.g_procDatabase.initProcItems();
       // CGlobal.g_database.listItems();

        CDollTableModel l_paperDollTblModel = (CDollTableModel) paperDollTable.getModel();
        l_paperDollTblModel.setDataLink(CGlobal.g_paperDoll);
        paperDollTable.setDefaultRenderer(CPaperDoll.class, new CDollRenderer(true));
        CGlobal.g_paperDoll.refreshTable();

        CGlobal.g_database.initItemDatabaseTables();
        CGlobal.g_database.setupGearData();

        TabbedPane.setSelectedIndex(0);
        defaultTalents();

        CGlobal.g_paperDoll.clearItems();
        CGlobal.g_paperDoll.setRace("Undead");
        CGlobal.g_paperDoll.clearProfessions();

        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40499), DollSlotType.HEAD);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(44664), DollSlotType.NECK);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40502), DollSlotType.SHOULDERS);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40250), DollSlotType.BACK);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40539), DollSlotType.CHEST);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(39765), DollSlotType.WRIST);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40496), DollSlotType.HANDS);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40205), DollSlotType.WAIST);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40500), DollSlotType.LEGS);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(39701), DollSlotType.FEET);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40586), DollSlotType.FINGER1);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40074), DollSlotType.FINGER2);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(44253), DollSlotType.TRINKET1);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40431), DollSlotType.TRINKET2);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(39714), DollSlotType.MAINHAND);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40386), DollSlotType.OFFHAND);
        CGlobal.g_paperDoll.setItem(CGlobal.g_database.getItem(40385), DollSlotType.RANGED);

        CGlobal.g_paperDoll.setGem(CGlobal.g_database.getItem(41398), DollSlotType.HEAD, 0);
        CGlobal.g_paperDoll.setGem(CGlobal.g_database.getItem(40029), DollSlotType.HEAD, 1);
        
        dpssystem.CThreadManager.runSimulation(this.standardDeviationTextField, this.totalDPSTextField, this.savedTotalDPSTextField);

        m_initialising = false;
        m_initialisingPlayStyle = false;
        this.setStats();
    }

    private void defaultTalents()
    {
		CRogueTalents l_rogueTalent = new CRogueTalents();
        // 00532310535010052010330125100500500300000000000000000005020000000000000000000000000
		l_rogueTalent.importTalentString("00532310535010052010330125100500500300000000000000000005020000000000000000000000000");
        l_rogueTalent.assignLabelsToTalents(jLayeredPane1);
        l_rogueTalent.clearGlyphs();      
        CGlobal.g_talents = l_rogueTalent;
    }

    private void getDBItems()
            // 25559, 40499, 40065, 40502, 40539, 40205, 40500, 39701, 39765, 40496, 40474, 40074, 40684, 44253, 40250, 39714, 40386, 39419, 43154, 31735
            // 40291, 42338, 44379, 39386, 43909, 39224, 44024, 35579, 43211, 43251, 39277, 43829, 44579, 44216, 39420, 39140, 39487, 43157, 41586
    {
        int[] l_testIds = { /* Filtered Items: */
            // My Gear
//    		/* Metagems: */ 41380, 41389, 41395, 41285, 41307, 41377, 41333, 41335, 44081, 41396, 41378, 44084, 41379, 44082, 41401, 41385, 44087, 41381, 44088, 41397, 41398, 41376, 41339, 44076, 41400, 41375, 44078, 44089, 41382,
//			/* Gems: */ 36766, 36767, 42142, 42143, 42144, 42145, 42146, 42148, 42149, 42150, 42151, 42152, 42153, 42154, 42155, 42156, 42157, 42158, 40119, 40120, 40121, 40122, 40008, 40009, 40010, 40011, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40085, 40086, 40088, 40089, 40090, 40091, 40092, 40094, 40095, 40096, 40098, 40099, 40100, 40101, 40102, 40103, 40104, 40105, 40106, 40142, 40143, 40144, 40145, 40146, 40147, 40148, 40149, 40150, 40151, 40152, 40153, 40154, 40155, 40156, 40157, 40158, 40159, 40160, 40161, 40162, 40163, 40037, 40038, 40039, 40040, 40041, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 34143, 42702, 40129, 40130, 40131, 40132, 40133, 40134, 40135, 40136, 40137, 40138, 40139, 40140, 40141, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40111, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 39996, 39997, 39998, 39999, 40000, 40001, 40002, 40003, 40123, 40124, 40125, 40126, 40127, 40128, 44066, 40012, 40013, 40014, 40015, 40016, 40017,
//			/* Gear: */ 32824, 34138, 34139, 34648, 34649, 34650, 34651, 34652, 34653, 34655, 34656, 34657, 34658, 34659, 34661, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35583, 35584, 35585, 35587, 35588, 35589, 35590, 35591, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35649, 35650, 35651, 35652, 35653, 35654, 35655, 35656, 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35666, 35670, 35672, 35673, 35675, 35676, 35677, 35678, 35679, 35680, 35681, 35682, 35683, 35807, 35808, 35809, 35810, 35811, 35812, 35814, 35815, 35816, 35817, 35818, 35820, 35821, 35822, 35823, 35824, 35826, 35827, 35829, 35830, 35832, 35833, 35834, 35835, 35839, 35841, 35842, 35843, 35844, 35845, 35846, 35848, 35849, 35851, 35852, 35856, 35857, 35858, 35859, 35860, 35861, 35862, 35863, 35864, 35865, 35866, 35867, 35868, 35869, 35870, 35871, 35872, 35873, 35875, 35877, 35878, 35879, 35880, 35881, 35882, 35883, 35884, 35885, 35886, 35887, 35888, 35889, 35890, 35891, 35892, 35893, 35894, 35895, 35896, 35897, 35898, 35899, 35900, 35901, 35902, 35903, 35904, 35905, 35909, 35910, 35911, 35912, 35913, 35914, 35915, 35916, 35917, 35918, 35919, 35920, 35921, 35922, 35923, 35924, 35925, 35926, 35927, 35928, 35929, 35930, 35931, 35932, 35933, 35934, 35935, 35936, 35937, 35938, 36871, 36872, 36874, 36878, 36879, 36880, 36881, 36882, 36883, 36884, 36885, 36886, 36887, 36888, 36937, 36938, 36939, 36943, 36944, 36945, 36946, 36947, 36948, 36949, 36950, 36951, 36952, 36953, 36954, 36961, 36962, 36969, 36971, 36972, 36973, 36974, 36975, 36976, 36977, 36978, 36979, 36980, 36981, 36982, 36983, 36984, 36985, 36986, 36988, 36989, 36991, 36992, 36993, 36994, 36995, 36996, 36997, 36998, 36999, 37000, 37002, 37004, 37005, 37007, 37008, 37009, 37014, 37015, 37016, 37017, 37018, 37019, 37022, 37023, 37024, 37025, 37026, 37028, 37029, 37030, 37031, 37032, 37033, 37034, 37036, 37037, 37038, 37039, 37040, 37041, 37042, 37043, 37044, 37046, 37047, 37048, 37049, 37050, 37051, 37052, 37053, 37054, 37055, 37056, 37057, 37058, 37060, 37061, 37062, 37064, 37065, 37066, 37067, 37068, 37069, 37070, 37072, 37073, 37074, 37075, 37076, 37077, 37078, 37079, 37080, 37081, 37082, 37083, 37084, 37086, 37088, 37095, 37096, 37099, 37105, 37106, 37107, 37108, 37109, 37110, 37111, 37112, 37113, 37114, 37115, 37116, 37117, 37122, 37134, 37135, 37138, 37139, 37141, 37144, 37149, 37150, 37151, 37152, 37153, 37155, 37162, 37165, 37166, 37167, 37169, 37170, 37171, 37172, 37177, 37178, 37179, 37180, 37181, 37182, 37183, 37184, 37186, 37188, 37189, 37190, 37191, 37192, 37193, 37194, 37195, 37196, 37197, 37203, 37204, 37205, 37206, 37207, 37208, 37209, 37210, 37211, 37212, 37213, 37214, 37215, 37216, 37217, 37218, 37219, 37220, 37221, 37222, 37223, 37224, 37225, 37226, 37227, 37228, 37230, 37231, 37232, 37234, 37235, 37236, 37237, 37238, 37239, 37240, 37241, 37242, 37243, 37254, 37255, 37256, 37257, 37258, 37260, 37261, 37262, 37263, 37264, 37270, 37271, 37272, 37273, 37274, 37275, 37276, 37277, 37280, 37282, 37283, 37288, 37289, 37290, 37291, 37292, 37293, 37294, 37319, 37320, 37322, 37325, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37414, 37415, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37433, 37434, 37435, 37436, 37437, 37439, 37440, 37441, 37442, 37443, 37446, 37447, 37456, 37458, 37461, 37462, 37463, 37471, 37475, 37476, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37487, 37505, 37506, 37507, 37508, 37509, 37510, 37511, 37512, 37513, 37514, 37515, 37516, 37517, 37518, 37519, 37520, 37521, 37522, 37523, 37524, 37525, 37526, 37527, 37528, 37529, 37530, 37535, 37537, 37541, 37543, 37544, 37545, 37546, 37547, 37548, 37555, 37556, 37557, 37558, 37559, 37562, 37564, 37566, 37573, 37587, 37590, 37591, 37592, 37593, 37594, 37595, 37612, 37613, 37614, 37615, 37616, 37617, 37618, 37619, 37620, 37622, 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, 37639, 37640, 37641, 37642, 37643, 37644, 37645, 37646, 37647, 37648, 37650, 37651, 37652, 37653, 37654, 37655, 37656, 37657, 37658, 37660, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37675, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37694, 37695, 37696, 37712, 37714, 37715, 37717, 37718, 37721, 37722, 37723, 37724, 37725, 37726, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37775, 37776, 37777, 37778, 37779, 37780, 37781, 37782, 37783, 37784, 37785, 37786, 37787, 37788, 37789, 37790, 37791, 37792, 37793, 37794, 37795, 37796, 37797, 37798, 37799, 37800, 37801, 37802, 37803, 37804, 37805, 37806, 37807, 37808, 37809, 37810, 37811, 37812, 37813, 37814, 37817, 37818, 37819, 37820, 37821, 37822, 37823, 37824, 37825, 37826, 37835, 37840, 37841, 37842, 37843, 37844, 37845, 37846, 37847, 37848, 37849, 37850, 37851, 37852, 37853, 37854, 37855, 37856, 37857, 37858, 37861, 37862, 37867, 37868, 37869, 37870, 37871, 37872, 37873, 37874, 37875, 37876, 37883, 37884, 37886, 37889, 37890, 37891, 37936, 37937, 37938, 37939, 37940, 37941, 37942, 37943, 37944, 37945, 37947, 37948, 37949, 37950, 37953, 37954, 37955, 37956, 37957, 37958, 37959, 37960, 37961, 37962, 37963, 37964, 37965, 37966, 37967, 37968, 37969, 37970, 37971, 37976, 37980, 37981, 37982, 37983, 37984, 37985, 37986, 37987, 37988, 37989, 37990, 37991, 37992, 37993, 37995, 37996, 37998, 37999, 38000, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38010, 38011, 38012, 38013, 38014, 38023, 38024, 38025, 38026, 38027, 38028, 38029, 38030, 38031, 38032, 38033, 38034, 38035, 38036, 38037, 38039, 38040, 38041, 38042, 38043, 38044, 38045, 38046, 38047, 38048, 38049, 38051, 38053, 38054, 38055, 38056, 38057, 38068, 38070, 38071, 38073, 38080, 38084, 38085, 38086, 38087, 38088, 38092, 38093, 38094, 38095, 38096, 38097, 38100, 38101, 38102, 38103, 38104, 38105, 38106, 38107, 38108, 38109, 38110, 38111, 38112, 38114, 38115, 38116, 38117, 38118, 38126, 38127, 38128, 38129, 38130, 38131, 38132, 38133, 38134, 38135, 38137, 38138, 38140, 38141, 38142, 38143, 38146, 38147, 38148, 38150, 38151, 38152, 38153, 38154, 38155, 38156, 38157, 38169, 38170, 38171, 38173, 38174, 38176, 38177, 38178, 38181, 38187, 38188, 38189, 38190, 38191, 38194, 38195, 38196, 38197, 38198, 38202, 38204, 38206, 38207, 38208, 38212, 38213, 38214, 38217, 38218, 38219, 38220, 38221, 38222, 38223, 38224, 38226, 38227, 38228, 38230, 38231, 38232, 38237, 38238, 38239, 38240, 38241, 38242, 38250, 38251, 38252, 38257, 38258, 38259, 38284, 38293, 38322, 38347, 38353, 38354, 38355, 38356, 38357, 38358, 38359, 38360, 38361, 38362, 38363, 38364, 38365, 38366, 38367, 38368, 38399, 38400, 38401, 38402, 38403, 38404, 38405, 38406, 38407, 38408, 38409, 38410, 38411, 38412, 38413, 38414, 38415, 38416, 38417, 38418, 38419, 38420, 38421, 38422, 38424, 38433, 38434, 38435, 38436, 38437, 38438, 38439, 38440, 38441, 38452, 38453, 38454, 38455, 38456, 38457, 38458, 38459, 38460, 38461, 38462, 38463, 38464, 38465, 38513, 38528, 38529, 38530, 38531, 38532, 38533, 38534, 38535, 38536, 38537, 38540, 38541, 38542, 38543, 38588, 38589, 38590, 38591, 38592, 38611, 38613, 38614, 38615, 38616, 38617, 38618, 38632, 38633, 38661, 38662, 38663, 38664, 38665, 38666, 38667, 38668, 38669, 38670, 38671, 38672, 38674, 38675, 38707, 38710, 38711, 38712, 38713, 38714, 38715, 38716, 38717, 38718, 38719, 38726, 38727, 38728, 38729, 38730, 38732, 38733, 38734, 38735, 38736, 38737, 38739, 38741, 38743, 38744, 38745, 38746, 38747, 38748, 38749, 38750, 38751, 38752, 38753, 38754, 38755, 38756, 38757, 38758, 38759, 38760, 38761, 38762, 38764, 38765, 39010, 39011, 39013, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 39023, 39025, 39026, 39027, 39028, 39029, 39030, 39031, 39033, 39034, 39035, 39036, 39038, 39040, 39043, 39044, 39045, 39046, 39047, 39048, 39049, 39050, 39051, 39052, 39053, 39054, 39055, 39056, 39057, 39058, 39059, 39060, 39062, 39064, 39065, 39066, 39068, 39070, 39072, 39073, 39074, 39075, 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39102, 39104, 39105, 39108, 39109, 39110, 39112, 39113, 39114, 39115, 39116, 39117, 39118, 39119, 39120, 39121, 39124, 39125, 39127, 39128, 39129, 39130, 39131, 39132, 39133, 39134, 39135, 39136, 39138, 39139, 39140, 39141, 39142, 39143, 39144, 39146, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 39176, 39177, 39178, 39179, 39180, 39181, 39182, 39183, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39208, 39215, 39216, 39217, 39221, 39224, 39225, 39226, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39252, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39267, 39270, 39271, 39272, 39273, 39274, 39275, 39276, 39277, 39278, 39279, 39280, 39281, 39282, 39283, 39284, 39285, 39291, 39292, 39293, 39294, 39295, 39296, 39297, 39298, 39299, 39306, 39307, 39308, 39309, 39310, 39311, 39320, 39322, 39323, 39330, 39331, 39332, 39333, 39335, 39336, 39337, 39344, 39345, 39346, 39347, 39348, 39363, 39365, 39366, 39367, 39368, 39369, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39383, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39435, 39436, 39437, 39438, 39439, 39441, 39442, 39443, 39444, 39445, 39446, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39457, 39458, 39459, 39461, 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39470, 39471, 39472, 39473, 39474, 39475, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39503, 39508, 39514, 39515, 39517, 39518, 39519, 39521, 39523, 39528, 39529, 39530, 39531, 39534, 39535, 39536, 39538, 39539, 39542, 39543, 39544, 39545, 39546, 39547, 39548, 39553, 39554, 39555, 39556, 39557, 39558, 39560, 39561, 39564, 39565, 39578, 39579, 39580, 39581, 39582, 39583, 39588, 39589, 39590, 39591, 39592, 39593, 39594, 39595, 39596, 39597, 39601, 39602, 39603, 39604, 39605, 39606, 39607, 39608, 39609, 39610, 39611, 39612, 39613, 39617, 39618, 39619, 39620, 39621, 39622, 39623, 39624, 39625, 39626, 39627, 39628, 39629, 39630, 39631, 39632, 39633, 39634, 39635, 39636, 39637, 39638, 39639, 39640, 39641, 39642, 39648, 39649, 39650, 39652, 39653, 39655, 39657, 39672, 39673, 39674, 39675, 39676, 39678, 39679, 39680, 39688, 39701, 39702, 39703, 39704, 39706, 39707, 39708, 39709, 39710, 39711, 39712, 39714, 39715, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39727, 39728, 39729, 39730, 39731, 39732, 39733, 39734, 39735, 39756, 39757, 39758, 39759, 39760, 39761, 39762, 39763, 39764, 39765, 39766, 39767, 39768, 39770, 39771, 39772, 39773, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39803, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39814, 39815, 39816, 39817, 39818, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39829, 39830, 39831, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39880, 39881, 39882, 39886, 39887, 39888, 39890, 39891, 39893, 39894, 39895, 39897, 40060, 40061, 40062, 40063, 40064, 40065, 40069, 40071, 40074, 40075, 40080, 40107, 40108, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40196, 40197, 40198, 40200, 40201, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40362, 40363, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40395, 40396, 40398, 40399, 40400, 40401, 40402, 40403, 40405, 40406, 40407, 40408, 40409, 40410, 40412, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, 40424, 40426, 40427, 40428, 40429, 40430, 40431, 40432, 40433, 40437, 40438, 40439, 40445, 40446, 40447, 40448, 40449, 40450, 40451, 40453, 40454, 40455, 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40483, 40486, 40488, 40489, 40490, 40491, 40493, 40494, 40495, 40496, 40497, 40499, 40500, 40502, 40503, 40504, 40505, 40506, 40507, 40508, 40509, 40510, 40511, 40512, 40513, 40514, 40515, 40516, 40517, 40518, 40519, 40520, 40521, 40522, 40523, 40524, 40525, 40526, 40527, 40528, 40529, 40530, 40531, 40532, 40539, 40541, 40543, 40544, 40545, 40546, 40547, 40548, 40549, 40550, 40552, 40554, 40555, 40556, 40557, 40558, 40559, 40560, 40561, 40562, 40563, 40564, 40565, 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, 40574, 40575, 40576, 40577, 40578, 40579, 40580, 40581, 40583, 40584, 40585, 40586, 40588, 40589, 40590, 40591, 40592, 40594, 40602, 40643, 40668, 40669, 40670, 40671, 40672, 40673, 40674, 40675, 40678, 40679, 40680, 40681, 40682, 40683, 40684, 40685, 40688, 40689, 40691, 40692, 40693, 40694, 40695, 40696, 40697, 40698, 40699, 40700, 40701, 40702, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40715, 40716, 40717, 40718, 40719, 40720, 40721, 40722, 40723, 40724, 40733, 40734, 40735, 40736, 40737, 40738, 40739, 40740, 40741, 40742, 40743, 40745, 40746, 40747, 40748, 40749, 40750, 40751, 40755, 40756, 40757, 40758, 40767, 40778, 40779, 40780, 40781, 40782, 40783, 40784, 40785, 40786, 40797, 40798, 40799, 40801, 40802, 40803, 40804, 40805, 40806, 40816, 40817, 40818, 40819, 40820, 40821, 40823, 40824, 40825, 40836, 40837, 40838, 40840, 40841, 40842, 40844, 40845, 40846, 40856, 40857, 40858, 40859, 40860, 40861, 40862, 40863, 40864, 40865, 40877, 40878, 40879, 40880, 40887, 40888, 40895, 40898, 40904, 40905, 40918, 40925, 40926, 40930, 40931, 40932, 40936, 40937, 40938, 40942, 40943, 40949, 40950, 40951, 40952, 40953, 40954, 40955, 40956, 40957, 40958, 40959, 40960, 40961, 40962, 40966, 40972, 40973, 40974, 40975, 40982, 40986, 40987, 40988, 40989, 40990, 40991, 40998, 40999, 41000, 41004, 41005, 41006, 41010, 41011, 41012, 41016, 41017, 41018, 41023, 41024, 41025, 41026, 41030, 41031, 41032, 41036, 41037, 41041, 41042, 41043, 41047, 41048, 41049, 41050, 41054, 41059, 41063, 41064, 41068, 41069, 41073, 41074, 41078, 41079, 41080, 41084, 41085, 41086, 41112, 41113, 41114, 41116, 41117, 41121, 41126, 41127, 41128, 41129, 41134, 41135, 41136, 41140, 41141, 41142, 41148, 41149, 41150, 41154, 41155, 41156, 41160, 41162, 41164, 41165, 41168, 41181, 41182, 41183, 41184, 41185, 41186, 41187, 41188, 41189, 41190, 41198, 41202, 41203, 41204, 41208, 41209, 41210, 41214, 41215, 41216, 41223, 41224, 41228, 41229, 41233, 41234, 41238, 41239, 41240, 41241, 41242, 41243, 41245, 41257, 41264, 41268, 41269, 41270, 41271, 41272, 41273, 41274, 41278, 41279, 41280, 41284, 41286, 41290, 41291, 41292, 41296, 41297, 41301, 41302, 41303, 41308, 41309, 41313, 41314, 41315, 41319, 41320, 41324, 41325, 41326, 41330, 41331, 41332, 41344, 41345, 41346, 41347, 41348, 41349, 41350, 41351, 41352, 41353, 41354, 41355, 41356, 41357, 41383, 41384, 41386, 41387, 41388, 41391, 41392, 41394, 41512, 41513, 41515, 41516, 41519, 41520, 41521, 41522, 41523, 41525, 41528, 41543, 41544, 41545, 41546, 41548, 41549, 41550, 41551, 41553, 41554, 41555, 41587, 41588, 41589, 41590, 41591, 41592, 41597, 41598, 41600, 41607, 41608, 41609, 41610, 41616, 41620, 41624, 41628, 41629, 41633, 41634, 41638, 41639, 41643, 41644, 41645, 41646, 41647, 41648, 41649, 41653, 41654, 41658, 41659, 41660, 41664, 41665, 41666, 41670, 41671, 41675, 41676, 41677, 41681, 41682, 41712, 41713, 41714, 41755, 41756, 41757, 41758, 41759, 41760, 41761, 41762, 41763, 41765, 41766, 41770, 41771, 41772, 41815, 41816, 41821, 41822, 41824, 41825, 41826, 41827, 41828, 41829, 41830, 41831, 41835, 41839, 41844, 41845, 41846, 41847, 41848, 41849, 41850, 41851, 41852, 41853, 41857, 41858, 41862, 41863, 41867, 41868, 41872, 41873, 41877, 41878, 41879, 41880, 41884, 41890, 41891, 41892, 41896, 41897, 41900, 41901, 41902, 41905, 41907, 41908, 41911, 41912, 41913, 41914, 41918, 41919, 41920, 41924, 41925, 41926, 41930, 41931, 41932, 41933, 41937, 41938, 41939, 41943, 41944, 41945, 41949, 41950, 41951, 41956, 41957, 41958, 41962, 41963, 41964, 41968, 41969, 41970, 41974, 41975, 41984, 41985, 41986, 41987, 41990, 41991, 41992, 41995, 41996, 41997, 42000, 42001, 42002, 42003, 42004, 42007, 42008, 42009, 42010, 42013, 42014, 42015, 42016, 42019, 42020, 42021, 42022, 42023, 42024, 42025, 42026, 42027, 42028, 42029, 42030, 42031, 42032, 42033, 42055, 42056, 42057, 42058, 42059, 42060, 42061, 42062, 42063, 42064, 42065, 42066, 42067, 42068, 42083, 42093, 42095, 42096, 42100, 42101, 42102, 42103, 42110, 42111, 42112, 42113, 42114, 42115, 42122, 42123, 42128, 42129, 42130, 42131, 42132, 42206, 42207, 42208, 42212, 42213, 42214, 42215, 42216, 42217, 42218, 42219, 42220, 42221, 42222, 42223, 42224, 42226, 42227, 42231, 42232, 42236, 42237, 42241, 42242, 42247, 42248, 42254, 42255, 42259, 42260, 42264, 42265, 42269, 42270, 42274, 42275, 42279, 42280, 42284, 42285, 42289, 42290, 42294, 42295, 42296, 42297, 42316, 42317, 42321, 42322, 42326, 42327, 42331, 42332, 42336, 42337, 42338, 42339, 42340, 42341, 42343, 42344, 42345, 42346, 42351, 42352, 42356, 42359, 42362, 42382, 42383, 42384, 42388, 42389, 42390, 42395, 42413, 42418, 42435, 42443, 42444, 42445, 42446, 42447, 42448, 42449, 42450, 42484, 42485, 42489, 42490, 42494, 42495, 42501, 42502, 42508, 42511, 42512, 42513, 42517, 42518, 42519, 42523, 42524, 42525, 42529, 42530, 42531, 42535, 42536, 42537, 42549, 42550, 42551, 42552, 42553, 42554, 42555, 42556, 42557, 42558, 42559, 42563, 42564, 42568, 42569, 42570, 42574, 42575, 42576, 42577, 42578, 42582, 42583, 42587, 42588, 42593, 42594, 42595, 42596, 42597, 42601, 42602, 42606, 42607, 42611, 42612, 42613, 42614, 42618, 42619, 42620, 42642, 42643, 42644, 42645, 42646, 42647, 42723, 42724, 42725, 42726, 42727, 42728, 42729, 42730, 42731, 42758, 42760, 42761, 42762, 42763, 42765, 42766, 42767, 42768, 42785, 42786, 42787, 42788, 42789, 42790, 42791, 42792, 42793, 42794, 42795, 42796, 42798, 42799, 42800, 42801, 42802, 42803, 42804, 42805, 42806, 42807, 42808, 42809, 42810, 42811, 42812, 42813, 42814, 42815, 42816, 42817, 42818, 42819, 42820, 42821, 42822, 42823, 42824, 42825, 42826, 42827, 42828, 42829, 42830, 42831, 42832, 42833, 42834, 42835, 42836, 42841, 42842, 42843, 42844, 42845, 42846, 42847, 42848, 42849, 42850, 42851, 42852, 42857, 42858, 42859, 42860, 42861, 42862, 42863, 42864, 42865, 42866, 42867, 42868, 42869, 42870, 42871, 42872, 42874, 42876, 42877, 42878, 42879, 42880, 42881, 42882, 42883, 42884, 42887, 42888, 42889, 42890, 42891, 42892, 42893, 42895, 42896, 42943, 42944, 42945, 42946, 42947, 42948, 42949, 42950, 42951, 42952, 42984, 42985, 42988, 42991, 42992, 43085, 43129, 43130, 43131, 43132, 43133, 43160, 43161, 43162, 43163, 43164, 43165, 43167, 43168, 43171, 43172, 43173, 43174, 43176, 43177, 43178, 43179, 43180, 43181, 43182, 43183, 43184, 43185, 43186, 43187, 43188, 43189, 43190, 43191, 43192, 43193, 43194, 43195, 43197, 43198, 43200, 43201, 43202, 43203, 43204, 43207, 43208, 43209, 43210, 43211, 43212, 43213, 43244, 43245, 43246, 43247, 43248, 43249, 43250, 43251, 43252, 43253, 43255, 43256, 43257, 43258, 43260, 43261, 43262, 43263, 43264, 43265, 43266, 43271, 43273, 43277, 43278, 43279, 43280, 43281, 43282, 43283, 43284, 43285, 43286, 43287, 43300, 43305, 43306, 43309, 43310, 43311, 43312, 43313, 43345, 43348, 43353, 43358, 43363, 43375, 43382, 43387, 43401, 43402, 43403, 43404, 43405, 43406, 43407, 43408, 43409, 43410, 43433, 43434, 43435, 43436, 43437, 43438, 43439, 43442, 43443, 43444, 43445, 43446, 43447, 43448, 43449, 43450, 43451, 43452, 43453, 43454, 43455, 43456, 43457, 43458, 43459, 43461, 43469, 43481, 43482, 43484, 43495, 43498, 43500, 43502, 43515, 43565, 43566, 43582, 43583, 43584, 43585, 43586, 43587, 43588, 43590, 43591, 43592, 43593, 43594, 43595, 43611, 43654, 43655, 43656, 43657, 43660, 43661, 43663, 43664, 43666, 43667, 43828, 43830, 43831, 43832, 43833, 43834, 43835, 43836, 43837, 43839, 43840, 43841, 43842, 43843, 43844, 43845, 43846, 43847, 43849, 43855, 43856, 43857, 43858, 43859, 43860, 43861, 43862, 43863, 43864, 43865, 43866, 43870, 43871, 43872, 43873, 43874, 43875, 43877, 43879, 43880, 43881, 43882, 43883, 43884, 43885, 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43896, 43897, 43898, 43899, 43900, 43903, 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, 43920, 43921, 43923, 43924, 43925, 43926, 43927, 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, 43937, 43939, 43940, 43941, 43942, 43943, 43944, 43945, 43946, 43947, 43948, 43969, 43970, 43971, 43972, 43973, 43974, 43975, 43976, 43977, 43978, 43979, 43980, 43981, 43982, 43988, 43989, 43990, 43991, 43992, 43993, 43994, 43995, 43996, 43998, 44000, 44002, 44003, 44004, 44005, 44006, 44007, 44008, 44011, 44013, 44014, 44015, 44016, 44017, 44018, 44019, 44020, 44021, 44022, 44023, 44024, 44025, 44026, 44027, 44028, 44029, 44030, 44031, 44032, 44033, 44034, 44035, 44036, 44037, 44038, 44039, 44040, 44041, 44042, 44043, 44044, 44045, 44046, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44062, 44063, 44073, 44074, 44091, 44092, 44093, 44094, 44095, 44096, 44097, 44098, 44099, 44100, 44101, 44102, 44103, 44104, 44105, 44106, 44107, 44108, 44109, 44110, 44111, 44112, 44116, 44117, 44118, 44120, 44121, 44122, 44123, 44166, 44167, 44170, 44171, 44173, 44174, 44176, 44179, 44180, 44181, 44182, 44183, 44187, 44188, 44189, 44190, 44192, 44193, 44194, 44195, 44196, 44197, 44198, 44199, 44200, 44201, 44202, 44203, 44204, 44205, 44210, 44211, 44213, 44214, 44215, 44216, 44217, 44218, 44219, 44239, 44240, 44241, 44242, 44243, 44244, 44245, 44247, 44248, 44249, 44250, 44253, 44256, 44257, 44258, 44283, 44295, 44296, 44297, 44302, 44303, 44305, 44306, 44308, 44309, 44310, 44311, 44312, 44313, 44322, 44323, 44324, 44334, 44335, 44336, 44337, 44338, 44339, 44340, 44341, 44342, 44343, 44344, 44345, 44346, 44347, 44348, 44349, 44350, 44351, 44352, 44353, 44354, 44355, 44356, 44357, 44358, 44359, 44360, 44361, 44362, 44363, 44364, 44365, 44366, 44367, 44368, 44369, 44370, 44371, 44372, 44373, 44374, 44375, 44376, 44377, 44378, 44379, 44380, 44381, 44382, 44383, 44384, 44385, 44386, 44387, 44388, 44391, 44392, 44393, 44394, 44395, 44396, 44397, 44398, 44399, 44400, 44401, 44402, 44403, 44404, 44405, 44406, 44407, 44408, 44409, 44410, 44411, 44412, 44415, 44416, 44417, 44418, 44419, 44420, 44429, 44431, 44436, 44437, 44438, 44440, 44441, 44442, 44443, 44444, 44445, 44446, 44447, 44448, 44504, 44579, 44583, 44590, 44591, 44592, 44593, 44594, 44595, 44596, 44597, 44649, 44657, 44658, 44659, 44660, 44661, 44662, 44664, 44665, 44666, 44667, 44668, 44669, 44670, 44671, 44672, 44673, 44674, 44675, 44676, 44677, 44681, 44682, 44683, 44685, 44686, 44687, 44688, 44691, 44695, 44696, 44697, 44708, 44732, 44734, 44735, 44736, 44740, 44741, 44742, 44745, 44746, 44747, 44748
				/* Metagems: */ 41380, 41389, 41395, 41285, 41307, 41377, 41333, 41335, 44081, 41396, 41378, 44084, 41379, 44082, 41401, 41385, 44087, 41381, 44088, 41397, 41398, 41376, 41339, 44076, 41400, 41375, 44078, 44089, 41382,
				/* Gems: */ 36766, 36767, 42142, 42143, 42144, 42145, 42146, 42148, 42149, 42150, 42151, 42152, 42153, 42154, 42155, 42156, 42157, 42158, 40119, 40120, 40121, 40122, 40008, 40009, 40010, 40011, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40085, 40086, 40088, 40089, 40090, 40091, 40092, 40094, 40095, 40096, 40098, 40099, 40100, 40101, 40102, 40103, 40104, 40105, 40106, 40142, 40143, 40144, 40145, 40146, 40147, 40148, 40149, 40150, 40151, 40152, 40153, 40154, 40155, 40156, 40157, 40158, 40159, 40160, 40161, 40162, 40163, 40037, 40038, 40039, 40040, 40041, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 34143, 42702, 40129, 40130, 40131, 40132, 40133, 40134, 40135, 40136, 40137, 40138, 40139, 40140, 40141, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40111, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 39996, 39997, 39998, 39999, 40000, 40001, 40002, 40003, 40123, 40124, 40125, 40126, 40127, 40128, 44066, 40012, 40013, 40014, 40015, 40016, 40017,
				/* Gear: */ 32824, 34138, 34139, 34648, 34649, 34650, 34651, 34652, 34653, 34655, 34656, 34657, 34658, 34659, 34661, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35583, 35584, 35585, 35587, 35588, 35589, 35590, 35591, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35649, 35650, 35651, 35652, 35653, 35654, 35655, 35656, 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35666, 35670, 35672, 35673, 35675, 35676, 35677, 35678, 35679, 35680, 35681, 35682, 35683, 35807, 35808, 35809, 35810, 35811, 35812, 35814, 35815, 35816, 35817, 35818, 35820, 35821, 35822, 35823, 35824, 35826, 35827, 35829, 35830, 35832, 35833, 35834, 35835, 35839, 35841, 35842, 35843, 35844, 35845, 35846, 35848, 35849, 35851, 35852, 35856, 35857, 35858, 35859, 35860, 35861, 35862, 35863, 35864, 35865, 35866, 35867, 35868, 35869, 35870, 35871, 35872, 35873, 35875, 35877, 35878, 35879, 35880, 35881, 35882, 35883, 35884, 35885, 35886, 35887, 35888, 35889, 35890, 35891, 35892, 35893, 35894, 35895, 35896, 35897, 35898, 35899, 35900, 35901, 35902, 35903, 35904, 35905, 35909, 35910, 35911, 35912, 35913, 35914, 35915, 35916, 35917, 35918, 35919, 35920, 35921, 35922, 35923, 35924, 35925, 35926, 35927, 35928, 35929, 35930, 35931, 35932, 35933, 35934, 35935, 35936, 35937, 35938, 36871, 36872, 36874, 36878, 36879, 36880, 36881, 36882, 36883, 36884, 36885, 36886, 36887, 36888, 36937, 36938, 36939, 36943, 36944, 36945, 36946, 36947, 36948, 36949, 36950, 36951, 36952, 36953, 36954, 36961, 36962, 36969, 36971, 36972, 36973, 36974, 36975, 36976, 36977, 36978, 36979, 36980, 36981, 36982, 36983, 36984, 36985, 36986, 36988, 36989, 36991, 36992, 36993, 36994, 36995, 36996, 36997, 36998, 36999, 37000, 37002, 37004, 37005, 37007, 37008, 37009, 37014, 37015, 37016, 37017, 37018, 37019, 37022, 37023, 37024, 37025, 37026, 37028, 37029, 37030, 37031, 37032, 37033, 37034, 37036, 37037, 37038, 37039, 37040, 37041, 37042, 37043, 37044, 37046, 37047, 37048, 37049, 37050, 37051, 37052, 37053, 37054, 37055, 37056, 37057, 37058, 37060, 37061, 37062, 37064, 37065, 37066, 37067, 37068, 37069, 37070, 37072, 37073, 37074, 37075, 37076, 37077, 37078, 37079, 37080, 37081, 37082, 37083, 37084, 37086, 37088, 37095, 37096, 37099, 37105, 37106, 37107, 37108, 37109, 37110, 37111, 37112, 37113, 37114, 37115, 37116, 37117, 37122, 37134, 37135, 37138, 37139, 37141, 37144, 37149, 37150, 37151, 37152, 37153, 37155, 37162, 37165, 37166, 37167, 37169, 37170, 37171, 37172, 37177, 37178, 37179, 37180, 37181, 37182, 37183, 37184, 37186, 37188, 37189, 37190, 37191, 37192, 37193, 37194, 37195, 37196, 37197, 37203, 37204, 37205, 37206, 37207, 37208, 37209, 37210, 37211, 37212, 37213, 37214, 37215, 37216, 37217, 37218, 37219, 37220, 37221, 37222, 37223, 37224, 37225, 37226, 37227, 37228, 37230, 37231, 37232, 37234, 37235, 37236, 37237, 37238, 37239, 37240, 37241, 37242, 37243, 37254, 37255, 37256, 37257, 37258, 37260, 37261, 37262, 37263, 37264, 37270, 37271, 37272, 37273, 37274, 37275, 37276, 37277, 37280, 37282, 37283, 37288, 37289, 37290, 37291, 37292, 37293, 37294, 37319, 37320, 37322, 37325, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37414, 37415, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37433, 37434, 37435, 37436, 37437, 37439, 37440, 37441, 37442, 37443, 37446, 37447, 37456, 37458, 37461, 37462, 37463, 37471, 37475, 37476, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37487, 37505, 37506, 37507, 37508, 37509, 37510, 37511, 37512, 37513, 37514, 37515, 37516, 37517, 37518, 37519, 37520, 37521, 37522, 37523, 37524, 37525, 37526, 37527, 37528, 37529, 37530, 37535, 37537, 37541, 37543, 37544, 37545, 37546, 37547, 37548, 37555, 37556, 37557, 37558, 37559, 37562, 37564, 37566, 37573, 37587, 37590, 37591, 37592, 37593, 37594, 37595, 37612, 37613, 37614, 37615, 37616, 37617, 37618, 37619, 37620, 37622, 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, 37639, 37640, 37641, 37642, 37643, 37644, 37645, 37646, 37647, 37648, 37650, 37651, 37652, 37653, 37654, 37655, 37656, 37657, 37658, 37660, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37675, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37694, 37695, 37696, 37712, 37714, 37715, 37717, 37718, 37721, 37722, 37723, 37724, 37725, 37726, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37775, 37776, 37777, 37778, 37779, 37780, 37781, 37782, 37783, 37784, 37785, 37786, 37787, 37788, 37789, 37790, 37791, 37792, 37793, 37794, 37795, 37796, 37797, 37798, 37799, 37800, 37801, 37802, 37803, 37804, 37805, 37806, 37807, 37808, 37809, 37810, 37811, 37812, 37813, 37814, 37817, 37818, 37819, 37820, 37821, 37822, 37823, 37824, 37825, 37826, 37835, 37840, 37841, 37842, 37843, 37844, 37845, 37846, 37847, 37848, 37849, 37850, 37851, 37852, 37853, 37854, 37855, 37856, 37857, 37858, 37861, 37862, 37867, 37868, 37869, 37870, 37871, 37872, 37873, 37874, 37875, 37876, 37883, 37884, 37886, 37889, 37890, 37891, 37936, 37937, 37938, 37939, 37940, 37941, 37942, 37943, 37944, 37945, 37947, 37948, 37949, 37950, 37953, 37954, 37955, 37956, 37957, 37958, 37959, 37960, 37961, 37962, 37963, 37964, 37965, 37966, 37967, 37968, 37969, 37970, 37971, 37976, 37980, 37981, 37982, 37983, 37984, 37985, 37986, 37987, 37988, 37989, 37990, 37991, 37992, 37993, 37995, 37996, 37998, 37999, 38000, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38010, 38011, 38012, 38013, 38014, 38023, 38024, 38025, 38026, 38027, 38028, 38029, 38030, 38031, 38032, 38033, 38034, 38035, 38036, 38037, 38039, 38040, 38041, 38042, 38043, 38044, 38045, 38046, 38047, 38048, 38049, 38051, 38053, 38054, 38055, 38056, 38057, 38068, 38070, 38071, 38073, 38080, 38084, 38085, 38086, 38087, 38088, 38092, 38093, 38094, 38095, 38096, 38097, 38100, 38101, 38102, 38103, 38104, 38105, 38106, 38107, 38108, 38109, 38110, 38111, 38112, 38114, 38115, 38116, 38117, 38118, 38126, 38127, 38128, 38129, 38130, 38131, 38132, 38133, 38134, 38135, 38137, 38138, 38140, 38141, 38142, 38143, 38146, 38147, 38148, 38150, 38151, 38152, 38153, 38154, 38155, 38156, 38157, 38169, 38170, 38171, 38173, 38174, 38176, 38177, 38178, 38181, 38187, 38188, 38189, 38190, 38191, 38194, 38195, 38196, 38197, 38198, 38202, 38204, 38206, 38207, 38208, 38212, 38213, 38214, 38217, 38218, 38219, 38220, 38221, 38222, 38223, 38224, 38226, 38227, 38228, 38230, 38231, 38232, 38237, 38238, 38239, 38240, 38241, 38242, 38250, 38251, 38252, 38257, 38258, 38259, 38284, 38293, 38322, 38347, 38353, 38354, 38355, 38356, 38357, 38358, 38359, 38360, 38361, 38362, 38363, 38364, 38365, 38366, 38367, 38368, 38399, 38400, 38401, 38402, 38403, 38404, 38405, 38406, 38407, 38408, 38409, 38410, 38411, 38412, 38413, 38414, 38415, 38416, 38417, 38418, 38419, 38420, 38421, 38422, 38424, 38433, 38434, 38435, 38436, 38437, 38438, 38439, 38440, 38441, 38452, 38453, 38454, 38455, 38456, 38457, 38458, 38459, 38460, 38461, 38462, 38463, 38464, 38465, 38513, 38528, 38529, 38530, 38531, 38532, 38533, 38534, 38535, 38536, 38537, 38540, 38541, 38542, 38543, 38588, 38589, 38590, 38591, 38592, 38611, 38613, 38614, 38615, 38616, 38617, 38618, 38632, 38633, 38661, 38662, 38663, 38664, 38665, 38666, 38667, 38668, 38669, 38670, 38671, 38672, 38674, 38675, 38707, 38710, 38711, 38712, 38713, 38714, 38715, 38716, 38717, 38718, 38719, 38726, 38727, 38728, 38729, 38730, 38732, 38733, 38734, 38735, 38736, 38737, 38739, 38741, 38743, 38744, 38745, 38746, 38747, 38748, 38749, 38750, 38751, 38752, 38753, 38754, 38755, 38756, 38757, 38758, 38759, 38760, 38761, 38762, 38764, 38765, 39010, 39011, 39013, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 39023, 39025, 39026, 39027, 39028, 39029, 39030, 39031, 39033, 39034, 39035, 39036, 39038, 39040, 39043, 39044, 39045, 39046, 39047, 39048, 39049, 39050, 39051, 39052, 39053, 39054, 39055, 39056, 39057, 39058, 39059, 39060, 39062, 39064, 39065, 39066, 39068, 39070, 39072, 39073, 39074, 39075, 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39102, 39104, 39105, 39108, 39109, 39110, 39112, 39113, 39114, 39115, 39116, 39117, 39118, 39119, 39120, 39121, 39124, 39125, 39127, 39128, 39129, 39130, 39131, 39132, 39133, 39134, 39135, 39136, 39138, 39139, 39140, 39141, 39142, 39143, 39144, 39146, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 39176, 39177, 39178, 39179, 39180, 39181, 39182, 39183, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39208, 39215, 39216, 39217, 39221, 39224, 39225, 39226, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39252, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39267, 39270, 39271, 39272, 39273, 39274, 39275, 39276, 39277, 39278, 39279, 39280, 39281, 39282, 39283, 39284, 39285, 39291, 39292, 39293, 39294, 39295, 39296, 39297, 39298, 39299, 39306, 39307, 39308, 39309, 39310, 39311, 39320, 39322, 39323, 39330, 39331, 39332, 39333, 39335, 39336, 39337, 39344, 39345, 39346, 39347, 39348, 39363, 39365, 39366, 39367, 39368, 39369, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39383, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39435, 39436, 39437, 39438, 39439, 39441, 39442, 39443, 39444, 39445, 39446, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39457, 39458, 39459, 39461, 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39470, 39471, 39472, 39473, 39474, 39475, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39503, 39508, 39514, 39515, 39517, 39518, 39519, 39521, 39523, 39528, 39529, 39530, 39531, 39534, 39535, 39536, 39538, 39539, 39542, 39543, 39544, 39545, 39546, 39547, 39548, 39553, 39554, 39555, 39556, 39557, 39558, 39560, 39561, 39564, 39565, 39578, 39579, 39580, 39581, 39582, 39583, 39588, 39589, 39590, 39591, 39592, 39593, 39594, 39595, 39596, 39597, 39601, 39602, 39603, 39604, 39605, 39606, 39607, 39608, 39609, 39610, 39611, 39612, 39613, 39617, 39618, 39619, 39620, 39621, 39622, 39623, 39624, 39625, 39626, 39627, 39628, 39629, 39630, 39631, 39632, 39633, 39634, 39635, 39636, 39637, 39638, 39639, 39640, 39641, 39642, 39648, 39649, 39650, 39652, 39653, 39655, 39657, 39672, 39673, 39674, 39675, 39676, 39678, 39679, 39680, 39688, 39701, 39702, 39703, 39704, 39706, 39707, 39708, 39709, 39710, 39711, 39712, 39714, 39715, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39727, 39728, 39729, 39730, 39731, 39732, 39733, 39734, 39735, 39756, 39757, 39758, 39759, 39760, 39761, 39762, 39763, 39764, 39765, 39766, 39767, 39768, 39770, 39771, 39772, 39773, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39803, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39814, 39815, 39816, 39817, 39818, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39829, 39830, 39831, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39880, 39881, 39882, 39886, 39887, 39888, 39890, 39891, 39893, 39894, 39895, 39897, 40060, 40061, 40062, 40063, 40064, 40065, 40069, 40071, 40074, 40075, 40080, 40107, 40108, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40196, 40197, 40198, 40200, 40201, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40362, 40363, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40395, 40396, 40398, 40399, 40400, 40401, 40402, 40403, 40405, 40406, 40407, 40408, 40409, 40410, 40412, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, 40424, 40426, 40427, 40428, 40429, 40430, 40431, 40432, 40433, 40437, 40438, 40439, 40445, 40446, 40447, 40448, 40449, 40450, 40451, 40453, 40454, 40455, 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40483, 40486, 40488, 40489, 40490, 40491, 40493, 40494, 40495, 40496, 40497, 40499, 40500, 40502, 40503, 40504, 40505, 40506, 40507, 40508, 40509, 40510, 40511, 40512, 40513, 40514, 40515, 40516, 40517, 40518, 40519, 40520, 40521, 40522, 40523, 40524, 40525, 40526, 40527, 40528, 40529, 40530, 40531, 40532, 40539, 40541, 40543, 40544, 40545, 40546, 40547, 40548, 40549, 40550, 40552, 40554, 40555, 40556, 40557, 40558, 40559, 40560, 40561, 40562, 40563, 40564, 40565, 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, 40574, 40575, 40576, 40577, 40578, 40579, 40580, 40581, 40583, 40584, 40585, 40586, 40588, 40589, 40590, 40591, 40592, 40594, 40602, 40643, 40668, 40669, 40670, 40671, 40672, 40673, 40674, 40675, 40678, 40679, 40680, 40681, 40682, 40683, 40684, 40685, 40688, 40689, 40691, 40692, 40693, 40694, 40695, 40696, 40697, 40698, 40699, 40700, 40701, 40702, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40715, 40716, 40717, 40718, 40719, 40720, 40721, 40722, 40723, 40724, 40733, 40734, 40735, 40736, 40737, 40738, 40739, 40740, 40741, 40742, 40743, 40745, 40746, 40747, 40748, 40749, 40750, 40751, 40755, 40756, 40757, 40758, 40767, 40778, 40779, 40780, 40781, 40782, 40783, 40784, 40785, 40786, 40797, 40798, 40799, 40801, 40802, 40803, 40804, 40805, 40806, 40816, 40817, 40818, 40819, 40820, 40821, 40823, 40824, 40825, 40836, 40837, 40838, 40840, 40841, 40842, 40844, 40845, 40846, 40856, 40857, 40858, 40859, 40860, 40861, 40862, 40863, 40864, 40865, 40877, 40878, 40879, 40880, 40887, 40888, 40895, 40898, 40904, 40905, 40918, 40925, 40926, 40930, 40931, 40932, 40936, 40937, 40938, 40942, 40943, 40949, 40950, 40951, 40952, 40953, 40954, 40955, 40956, 40957, 40958, 40959, 40960, 40961, 40962, 40966, 40972, 40973, 40974, 40975, 40982, 40986, 40987, 40988, 40989, 40990, 40991, 40998, 40999, 41000, 41004, 41005, 41006, 41010, 41011, 41012, 41016, 41017, 41018, 41023, 41024, 41025, 41026, 41030, 41031, 41032, 41036, 41037, 41041, 41042, 41043, 41047, 41048, 41049, 41050, 41054, 41059, 41063, 41064, 41068, 41069, 41073, 41074, 41078, 41079, 41080, 41084, 41085, 41086, 41112, 41113, 41114, 41116, 41117, 41121, 41126, 41127, 41128, 41129, 41134, 41135, 41136, 41140, 41141, 41142, 41148, 41149, 41150, 41154, 41155, 41156, 41160, 41162, 41164, 41165, 41168, 41181, 41182, 41183, 41184, 41185, 41186, 41187, 41188, 41189, 41190, 41198, 41202, 41203, 41204, 41208, 41209, 41210, 41214, 41215, 41216, 41223, 41224, 41228, 41229, 41233, 41234, 41238, 41239, 41240, 41241, 41242, 41243, 41245, 41257, 41264, 41268, 41269, 41270, 41271, 41272, 41273, 41274, 41278, 41279, 41280, 41284, 41286, 41290, 41291, 41292, 41296, 41297, 41301, 41302, 41303, 41308, 41309, 41313, 41314, 41315, 41319, 41320, 41324, 41325, 41326, 41330, 41331, 41332, 41344, 41345, 41346, 41347, 41348, 41349, 41350, 41351, 41352, 41353, 41354, 41355, 41356, 41357, 41383, 41384, 41386, 41387, 41388, 41391, 41392, 41394, 41512, 41513, 41515, 41516, 41519, 41520, 41521, 41522, 41523, 41525, 41528, 41543, 41544, 41545, 41546, 41548, 41549, 41550, 41551, 41553, 41554, 41555, 41587, 41588, 41589, 41590, 41591, 41592, 41597, 41598, 41600, 41607, 41608, 41609, 41610, 41616, 41620, 41624, 41628, 41629, 41633, 41634, 41638, 41639, 41643, 41644, 41645, 41646, 41647, 41648, 41649, 41653, 41654, 41658, 41659, 41660, 41664, 41665, 41666, 41670, 41671, 41675, 41676, 41677, 41681, 41682, 41712, 41713, 41714, 41755, 41756, 41757, 41758, 41759, 41760, 41761, 41762, 41763, 41765, 41766, 41770, 41771, 41772, 41815, 41816, 41821, 41822, 41824, 41825, 41826, 41827, 41828, 41829, 41830, 41831, 41835, 41839, 41844, 41845, 41846, 41847, 41848, 41849, 41850, 41851, 41852, 41853, 41857, 41858, 41862, 41863, 41867, 41868, 41872, 41873, 41877, 41878, 41879, 41880, 41884, 41890, 41891, 41892, 41896, 41897, 41900, 41901, 41902, 41905, 41907, 41908, 41911, 41912, 41913, 41914, 41918, 41919, 41920, 41924, 41925, 41926, 41930, 41931, 41932, 41933, 41937, 41938, 41939, 41943, 41944, 41945, 41949, 41950, 41951, 41956, 41957, 41958, 41962, 41963, 41964, 41968, 41969, 41970, 41974, 41975, 41984, 41985, 41986, 41987, 41990, 41991, 41992, 41995, 41996, 41997, 42000, 42001, 42002, 42003, 42004, 42007, 42008, 42009, 42010, 42013, 42014, 42015, 42016, 42019, 42020, 42021, 42022, 42023, 42024, 42025, 42026, 42027, 42028, 42029, 42030, 42031, 42032, 42033, 42055, 42056, 42057, 42058, 42059, 42060, 42061, 42062, 42063, 42064, 42065, 42066, 42067, 42068, 42083, 42093, 42095, 42096, 42100, 42101, 42102, 42103, 42110, 42111, 42112, 42113, 42114, 42115, 42122, 42123, 42128, 42129, 42130, 42131, 42132, 42206, 42207, 42208, 42212, 42213, 42214, 42215, 42216, 42217, 42218, 42219, 42220, 42221, 42222, 42223, 42224, 42226, 42227, 42231, 42232, 42236, 42237, 42241, 42242, 42247, 42248, 42254, 42255, 42259, 42260, 42264, 42265, 42269, 42270, 42274, 42275, 42279, 42280, 42284, 42285, 42289, 42290, 42294, 42295, 42296, 42297, 42316, 42317, 42321, 42322, 42326, 42327, 42331, 42332, 42336, 42337, 42338, 42339, 42340, 42341, 42343, 42344, 42345, 42346, 42351, 42352, 42356, 42359, 42362, 42382, 42383, 42384, 42388, 42389, 42390, 42395, 42413, 42418, 42435, 42443, 42444, 42445, 42446, 42447, 42448, 42449, 42450, 42484, 42485, 42489, 42490, 42494, 42495, 42501, 42502, 42508, 42511, 42512, 42513, 42517, 42518, 42519, 42523, 42524, 42525, 42529, 42530, 42531, 42535, 42536, 42537, 42549, 42550, 42551, 42552, 42553, 42554, 42555, 42556, 42557, 42558, 42559, 42563, 42564, 42568, 42569, 42570, 42574, 42575, 42576, 42577, 42578, 42582, 42583, 42587, 42588, 42593, 42594, 42595, 42596, 42597, 42601, 42602, 42606, 42607, 42611, 42612, 42613, 42614, 42618, 42619, 42620, 42642, 42643, 42644, 42645, 42646, 42647, 42723, 42724, 42725, 42726, 42727, 42728, 42729, 42730, 42731, 42758, 42760, 42761, 42762, 42763, 42765, 42766, 42767, 42768, 42785, 42786, 42787, 42788, 42789, 42790, 42791, 42792, 42793, 42794, 42795, 42796, 42798, 42799, 42800, 42801, 42802, 42803, 42804, 42805, 42806, 42807, 42808, 42809, 42810, 42811, 42812, 42813, 42814, 42815, 42816, 42817, 42818, 42819, 42820, 42821, 42822, 42823, 42824, 42825, 42826, 42827, 42828, 42829, 42830, 42831, 42832, 42833, 42834, 42835, 42836, 42841, 42842, 42843, 42844, 42845, 42846, 42847, 42848, 42849, 42850, 42851, 42852, 42857, 42858, 42859, 42860, 42861, 42862, 42863, 42864, 42865, 42866, 42867, 42868, 42869, 42870, 42871, 42872, 42874, 42876, 42877, 42878, 42879, 42880, 42881, 42882, 42883, 42884, 42887, 42888, 42889, 42890, 42891, 42892, 42893, 42895, 42896, 42943, 42944, 42945, 42946, 42947, 42948, 42949, 42950, 42951, 42952, 42984, 42985, 42988, 42991, 42992, 43085, 43129, 43130, 43131, 43132, 43133, 43160, 43161, 43162, 43163, 43164, 43165, 43167, 43168, 43171, 43172, 43173, 43174, 43176, 43177, 43178, 43179, 43180, 43181, 43182, 43183, 43184, 43185, 43186, 43187, 43188, 43189, 43190, 43191, 43192, 43193, 43194, 43195, 43197, 43198, 43200, 43201, 43202, 43203, 43204, 43207, 43208, 43209, 43210, 43211, 43212, 43213, 43244, 43245, 43246, 43247, 43248, 43249, 43250, 43251, 43252, 43253, 43255, 43256, 43257, 43258, 43260, 43261, 43262, 43263, 43264, 43265, 43266, 43271, 43273, 43277, 43278, 43279, 43280, 43281, 43282, 43283, 43284, 43285, 43286, 43287, 43300, 43305, 43306, 43309, 43310, 43311, 43312, 43313, 43345, 43348, 43353, 43358, 43363, 43375, 43382, 43387, 43401, 43402, 43403, 43404, 43405, 43406, 43407, 43408, 43409, 43410, 43433, 43434, 43435, 43436, 43437, 43438, 43439, 43442, 43443, 43444, 43445, 43446, 43447, 43448, 43449, 43450, 43451, 43452, 43453, 43454, 43455, 43456, 43457, 43458, 43459, 43461, 43469, 43481, 43482, 43484, 43495, 43498, 43500, 43502, 43515, 43565, 43566, 43582, 43583, 43584, 43585, 43586, 43587, 43588, 43590, 43591, 43592, 43593, 43594, 43595, 43611, 43654, 43655, 43656, 43657, 43660, 43661, 43663, 43664, 43666, 43667, 43828, 43830, 43831, 43832, 43833, 43834, 43835, 43836, 43837, 43839, 43840, 43841, 43842, 43843, 43844, 43845, 43846, 43847, 43849, 43855, 43856, 43857, 43858, 43859, 43860, 43861, 43862, 43863, 43864, 43865, 43866, 43870, 43871, 43872, 43873, 43874, 43875, 43877, 43879, 43880, 43881, 43882, 43883, 43884, 43885, 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43896, 43897, 43898, 43899, 43900, 43903, 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, 43920, 43921, 43923, 43924, 43925, 43926, 43927, 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, 43937, 43939, 43940, 43941, 43942, 43943, 43944, 43945, 43946, 43947, 43948, 43969, 43970, 43971, 43972, 43973, 43974, 43975, 43976, 43977, 43978, 43979, 43980, 43981, 43982, 43988, 43989, 43990, 43991, 43992, 43993, 43994, 43995, 43996, 43998, 44000, 44002, 44003, 44004, 44005, 44006, 44007, 44008, 44011, 44013, 44014, 44015, 44016, 44017, 44018, 44019, 44020, 44021, 44022, 44023, 44024, 44025, 44026, 44027, 44028, 44029, 44030, 44031, 44032, 44033, 44034, 44035, 44036, 44037, 44038, 44039, 44040, 44041, 44042, 44043, 44044, 44045, 44046, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44062, 44063, 44073, 44074, 44091, 44092, 44093, 44094, 44095, 44096, 44097, 44098, 44099, 44100, 44101, 44102, 44103, 44104, 44105, 44106, 44107, 44108, 44109, 44110, 44111, 44112, 44116, 44117, 44118, 44120, 44121, 44122, 44123, 44166, 44167, 44170, 44171, 44173, 44174, 44176, 44179, 44180, 44181, 44182, 44183, 44187, 44188, 44189, 44190, 44192, 44193, 44194, 44195, 44196, 44197, 44198, 44199, 44200, 44201, 44202, 44203, 44204, 44205, 44210, 44211, 44213, 44214, 44215, 44216, 44217, 44218, 44219, 44239, 44240, 44241, 44242, 44243, 44244, 44245, 44247, 44248, 44249, 44250, 44253, 44256, 44257, 44258, 44283, 44295, 44296, 44297, 44302, 44303, 44305, 44306, 44308, 44309, 44310, 44311, 44312, 44313, 44322, 44323, 44324, 44334, 44335, 44336, 44337, 44338, 44339, 44340, 44341, 44342, 44343, 44344, 44345, 44346, 44347, 44348, 44349, 44350, 44351, 44352, 44353, 44354, 44355, 44356, 44357, 44358, 44359, 44360, 44361, 44362, 44363, 44364, 44365, 44366, 44367, 44368, 44369, 44370, 44371, 44372, 44373, 44374, 44375, 44376, 44377, 44378, 44379, 44380, 44381, 44382, 44383, 44384, 44385, 44386, 44387, 44388, 44391, 44392, 44393, 44394, 44395, 44396, 44397, 44398, 44399, 44400, 44401, 44402, 44403, 44404, 44405, 44406, 44407, 44408, 44409, 44410, 44411, 44412, 44415, 44416, 44417, 44418, 44419, 44420, 44429, 44431, 44436, 44437, 44438, 44440, 44441, 44442, 44443, 44444, 44445, 44446, 44447, 44448, 44504, 44579, 44583, 44590, 44591, 44592, 44593, 44594, 44595, 44596, 44597, 44649, 44657, 44658, 44659, 44660, 44661, 44662, 44664, 44665, 44666, 44667, 44668, 44669, 44670, 44671, 44672, 44673, 44674, 44675, 44676, 44677, 44681, 44682, 44683, 44685, 44686, 44687, 44688, 44691, 44695, 44696, 44697, 44708, 44732, 44734, 44735, 44736, 44740, 44741, 44742, 44745, 44746, 44747, 44748
			};

        System.out.println("Importsing " + l_testIds.length + " web pages from wowhead!!");

        for (int i = 0; i < l_testIds.length; i ++)
        {
            if (!CGlobal.g_database.addDbItem(l_testIds[i], true))
            {
                System.out.println("Item " + l_testIds[i] + " failed");
            }
        }

        // CGlobal.g_database.listItems();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        topPanel = new javax.swing.JPanel();
        leftPanel = new javax.swing.JPanel();
        playerDetailsPanel = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        playerNameTextField = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        realmTextField = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        regionComboBox = new javax.swing.JComboBox();
        statusPanel = new javax.swing.JPanel();
        statusText = new javax.swing.JLabel();
        dpsPanel = new javax.swing.JPanel();
        saveDPSButton = new javax.swing.JButton();
        totalDPSTextField = new javax.swing.JTextField();
        getDPSButton = new javax.swing.JButton();
        savedTotalDPSTextField = new javax.swing.JTextField();
        standardDeviationTextField = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        importPlayerButton = new javax.swing.JButton();
        loadButton = new javax.swing.JButton();
        saveButton = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        statsTable = new javax.swing.JTable();
        statsBoostCheckBox = new javax.swing.JCheckBox();
        TabbedPane = new javax.swing.JTabbedPane();
        GearTab = new javax.swing.JPanel();
        paperDollScrollPane = new javax.swing.JScrollPane();
        paperDollTable = new javax.swing.JTable();
        paperDollDescLabel = new javax.swing.JLabel();
        paperDollComboBoxesPanel = new javax.swing.JPanel();
        professionAComboBox = new javax.swing.JComboBox();
        professionBComboBox = new javax.swing.JComboBox();
        raceComboBox = new javax.swing.JComboBox();
        raceLabel = new javax.swing.JLabel();
        professionsLabel = new javax.swing.JLabel();
        loadPaperDollButton = new javax.swing.JButton();
        savePaperDollButton = new javax.swing.JButton();
        TalentsTab = new javax.swing.JPanel();
        jLayeredPane1 = new javax.swing.JLayeredPane();
        jPanel6 = new javax.swing.JPanel();
        jLabel25 = new javax.swing.JLabel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel41 = new javax.swing.JPanel();
        jPanel34 = new javax.swing.JPanel();
        murderableCheckBox = new javax.swing.JCheckBox();
        loadPlayStyleButton = new javax.swing.JButton();
        savePlayStyleButton = new javax.swing.JButton();
        jScrollPane9 = new javax.swing.JScrollPane();
        playStyleTextArea = new javax.swing.JTextArea();
        testButton = new javax.swing.JButton();
        jPanel42 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel7 = new javax.swing.JLabel();
        fightTimeCalcFormattedTextField = new javax.swing.JFormattedTextField();
        jLabel8 = new javax.swing.JLabel();
        numberOfCritsCalcFormattedTextField = new javax.swing.JFormattedTextField();
        calcCPSTextField = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        calculateCritsPerSecondButton = new javax.swing.JButton();
        copyCPStoClipboardCheckBox = new javax.swing.JCheckBox();
        jPanel3 = new javax.swing.JPanel();
        hat4CPSFormattedTextField = new javax.swing.JFormattedTextField();
        hat3ClassComboBox = new javax.swing.JComboBox();
        hat4ClassComboBox = new javax.swing.JComboBox();
        hat1ClassComboBox = new javax.swing.JComboBox();
        hat2ClassComboBox = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        hat1CPSFormattedTextField = new javax.swing.JFormattedTextField();
        hat3CPSFormattedTextField = new javax.swing.JFormattedTextField();
        hat2CPSFormattedTextField = new javax.swing.JFormattedTextField();
        jLabel5 = new javax.swing.JLabel();
        loadHATButton = new javax.swing.JButton();
        saveHATButton = new javax.swing.JButton();
        BuffsTab = new javax.swing.JPanel();
        jLabel20 = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        jPanel23 = new javax.swing.JPanel();
        exposeArmorCheckBox = new javax.swing.JCheckBox();
        sunderArmorCheckBox = new javax.swing.JCheckBox();
        jPanel24 = new javax.swing.JPanel();
        cowCheckBox = new javax.swing.JCheckBox();
        faerieFireCheckBox = new javax.swing.JCheckBox();
        stingCheckBox = new javax.swing.JCheckBox();
        jPanel25 = new javax.swing.JPanel();
        traumaCheckBox = new javax.swing.JCheckBox();
        mangleCheckBox = new javax.swing.JCheckBox();
        jPanel26 = new javax.swing.JPanel();
        masterPoisonerCheckBox = new javax.swing.JCheckBox();
        hotcCheckBox = new javax.swing.JCheckBox();
        totemOfWrathCheckBox = new javax.swing.JCheckBox();
        jPanel27 = new javax.swing.JPanel();
        bloodFrenzyCheckBox = new javax.swing.JCheckBox();
        savageCombatCheckBox = new javax.swing.JCheckBox();
        jPanel28 = new javax.swing.JPanel();
        wintersChillCheckBox = new javax.swing.JCheckBox();
        improvedScorchCheckBox = new javax.swing.JCheckBox();
        jPanel29 = new javax.swing.JPanel();
        coeCheckBox = new javax.swing.JCheckBox();
        earthAndMoonCheckBox = new javax.swing.JCheckBox();
        ebonPlagueBringerCheckBox = new javax.swing.JCheckBox();
        jPanel30 = new javax.swing.JPanel();
        improvedFaerieFireCheckBox = new javax.swing.JCheckBox();
        miseryCheckBox = new javax.swing.JCheckBox();
        jPanel8 = new javax.swing.JPanel();
        jPanel9 = new javax.swing.JPanel();
        strengthOfEarthCheckBox = new javax.swing.JCheckBox();
        hornOfWinterCheckBox = new javax.swing.JCheckBox();
        jPanel10 = new javax.swing.JPanel();
        bomCheckBox = new javax.swing.JCheckBox();
        battleShoutCheckBox = new javax.swing.JCheckBox();
        jPanel11 = new javax.swing.JPanel();
        trueShotAuraCheckBox = new javax.swing.JCheckBox();
        unleashedRageCheckBox = new javax.swing.JCheckBox();
        abominationsMightCheckBox = new javax.swing.JCheckBox();
        jPanel12 = new javax.swing.JPanel();
        sanctifiedRetributionCheckBox = new javax.swing.JCheckBox();
        ferociousInspirationCheckBox = new javax.swing.JCheckBox();
        jPanel13 = new javax.swing.JPanel();
        improvedMoonkinFormCheckBox = new javax.swing.JCheckBox();
        swiftRetributionCheckBox = new javax.swing.JCheckBox();
        jPanel14 = new javax.swing.JPanel();
        bloodPactCheckBox = new javax.swing.JCheckBox();
        commandingShoutCheckBox = new javax.swing.JCheckBox();
        jPanel15 = new javax.swing.JPanel();
        pwfCheckBox = new javax.swing.JCheckBox();
        jPanel16 = new javax.swing.JPanel();
        bloodlustCheckBox = new javax.swing.JCheckBox();
        jPanel17 = new javax.swing.JPanel();
        bokCheckBox = new javax.swing.JCheckBox();
        jPanel18 = new javax.swing.JPanel();
        motwCheckBox = new javax.swing.JCheckBox();
        jPanel19 = new javax.swing.JPanel();
        heroicPresence = new javax.swing.JCheckBox();
        jPanel20 = new javax.swing.JPanel();
        rampageCheckBox = new javax.swing.JCheckBox();
        lotpCheckBox = new javax.swing.JCheckBox();
        jPanel21 = new javax.swing.JPanel();
        improvedIcyTalonsCheckBox = new javax.swing.JCheckBox();
        windfuryTotemCheckBox = new javax.swing.JCheckBox();
        jPanel22 = new javax.swing.JPanel();
        elementalOathCheckBox = new javax.swing.JCheckBox();
        moonkinAuraCheckBox = new javax.swing.JCheckBox();
        jPanel31 = new javax.swing.JPanel();
        jLabel29 = new javax.swing.JLabel();
        jLabel28 = new javax.swing.JLabel();
        foodComboBox = new javax.swing.JComboBox();
        scrollsComboBox = new javax.swing.JComboBox();
        jLabel27 = new javax.swing.JLabel();
        flaskComboBox = new javax.swing.JComboBox();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        statsBoosterTab = new javax.swing.JPanel();
        jPanel5 = new javax.swing.JPanel();
        agilitySlider = new javax.swing.JSlider();
        armorPenRatingSlider = new javax.swing.JSlider();
        attackPowerSlider = new javax.swing.JSlider();
        strengthSlider = new javax.swing.JSlider();
        hasteRatingSlider = new javax.swing.JSlider();
        critRatingSlider = new javax.swing.JSlider();
        hitRatingSlider = new javax.swing.JSlider();
        expertiseRatingSlider = new javax.swing.JSlider();
        resetBoostButton = new javax.swing.JButton();
        jLabel22 = new javax.swing.JLabel();
        gearDBPanel = new javax.swing.JPanel();
        gearDBTabs = new javax.swing.JTabbedPane();
        armorDBPanel = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        armorDBTable = new javax.swing.JTable();
        weaponsDBPanel = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        weaponsDBTable = new javax.swing.JTable();
        gemsDBPanel = new javax.swing.JPanel();
        jScrollPane4 = new javax.swing.JScrollPane();
        gemsDBTable = new javax.swing.JTable();
        addNewItemButton = new javax.swing.JButton();
        jLabel21 = new javax.swing.JLabel();
        ResultsTab = new javax.swing.JPanel();
        jLabel24 = new javax.swing.JLabel();
        overallChartsTabbedPane = new javax.swing.JTabbedPane();
        jPanel4 = new javax.swing.JPanel();
        jScrollPane6 = new javax.swing.JScrollPane();
        resultsDamageTable = new javax.swing.JTable();
        jScrollPane7 = new javax.swing.JScrollPane();
        procResultsTable = new javax.swing.JTable();
        jScrollPane8 = new javax.swing.JScrollPane();
        regenResultsTable = new javax.swing.JTable();
        jPanel38 = new javax.swing.JPanel();
        overallDamageLabel = new javax.swing.JLabel();
        jPanel36 = new javax.swing.JPanel();
        poisonDamageLabel = new javax.swing.JLabel();
        deadlyPoisonStackTimeDamageLabel = new javax.swing.JLabel();
        deadlyPoisonStackTimeDamageLabel1 = new javax.swing.JLabel();
        jPanel37 = new javax.swing.JPanel();
        jPanel39 = new javax.swing.JPanel();
        iterationsLabel = new javax.swing.JLabel();
        fightLengthLabel = new javax.swing.JLabel();
        timePerIterationLabel = new javax.swing.JLabel();
        totalTimeLabel = new javax.swing.JLabel();
        cpuCountLabel = new javax.swing.JLabel();
        iterationPlotPanel = new javax.swing.JPanel();
        jPanel40 = new javax.swing.JPanel();
        finisherDistributionLabel = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        topPanel.setPreferredSize(new java.awt.Dimension(1060, 700));

        playerDetailsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Player Details"));

        jLabel1.setText("Player");

        playerNameTextField.setText("Manigra");

        jLabel2.setText("Realm");

        realmTextField.setText("Kul Tiras");

        jLabel3.setText("Region");

        regionComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "EU", "US" }));
        regionComboBox.setToolTipText("The server location you play on");

        javax.swing.GroupLayout playerDetailsPanelLayout = new javax.swing.GroupLayout(playerDetailsPanel);
        playerDetailsPanel.setLayout(playerDetailsPanelLayout);
        playerDetailsPanelLayout.setHorizontalGroup(
            playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(playerDetailsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(playerDetailsPanelLayout.createSequentialGroup()
                            .addComponent(jLabel1)
                            .addGap(19, 19, 19))
                        .addGroup(playerDetailsPanelLayout.createSequentialGroup()
                            .addComponent(jLabel3)
                            .addGap(18, 18, 18))))
                .addGap(18, 18, 18)
                .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(realmTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 151, Short.MAX_VALUE)
                    .addComponent(regionComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, 151, Short.MAX_VALUE)
                    .addComponent(playerNameTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 151, Short.MAX_VALUE))
                .addContainerGap())
        );
        playerDetailsPanelLayout.setVerticalGroup(
            playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, playerDetailsPanelLayout.createSequentialGroup()
                .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(playerNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(realmTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(playerDetailsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(regionComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addGap(24, 24, 24))
        );

        statusPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Status"));

        statusText.setFont(new java.awt.Font("Arial Narrow", 0, 10));

        javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel);
        statusPanel.setLayout(statusPanelLayout);
        statusPanelLayout.setHorizontalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(statusText, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)
        );
        statusPanelLayout.setVerticalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(statusText, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        dpsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        saveDPSButton.setText("Save DPS");
        saveDPSButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveDPSButtonActionPerformed(evt);
            }
        });

        totalDPSTextField.setEditable(false);
        totalDPSTextField.setFont(new java.awt.Font("Arial Narrow", 1, 11));
        totalDPSTextField.setText("jTextField1");

        getDPSButton.setText("Get DPS");
        getDPSButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                getDPSButtonActionPerformed(evt);
            }
        });

        savedTotalDPSTextField.setEditable(false);
        savedTotalDPSTextField.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        savedTotalDPSTextField.setText("0");

        standardDeviationTextField.setEditable(false);
        standardDeviationTextField.setFont(new java.awt.Font("Arial Narrow", 1, 11));
        standardDeviationTextField.setText("jTextField1");

        jLabel6.setText("Std Deviation");

        javax.swing.GroupLayout dpsPanelLayout = new javax.swing.GroupLayout(dpsPanel);
        dpsPanel.setLayout(dpsPanelLayout);
        dpsPanelLayout.setHorizontalGroup(
            dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(dpsPanelLayout.createSequentialGroup()
                .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(dpsPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(saveDPSButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(getDPSButton, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE)))
                    .addGroup(dpsPanelLayout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(jLabel6)))
                .addGap(25, 25, 25)
                .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(dpsPanelLayout.createSequentialGroup()
                        .addComponent(savedTotalDPSTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dpsPanelLayout.createSequentialGroup()
                        .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(totalDPSTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)
                            .addComponent(standardDeviationTextField))
                        .addGap(10, 10, 10))))
        );
        dpsPanelLayout.setVerticalGroup(
            dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(dpsPanelLayout.createSequentialGroup()
                .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(standardDeviationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(getDPSButton)
                    .addComponent(totalDPSTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(dpsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(saveDPSButton)
                    .addComponent(savedTotalDPSTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        importPlayerButton.setText("Import Player from Armory");
        importPlayerButton.setToolTipText("Import player gear and talents from the Armory");
        importPlayerButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                importPlayerButtonActionPerformed(evt);
            }
        });

        loadButton.setText("Load");
        loadButton.setToolTipText("This will load a complete character build which includes player info, paperdoll, talents and raidbuffs.");
        loadButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadButtonActionPerformed(evt);
            }
        });

        saveButton.setText("Save");
        saveButton.setToolTipText("This will save a complete character build which includes player info, paperdoll, talents and raidbuffs.");
        saveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveButtonActionPerformed(evt);
            }
        });

        statsTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"Health", null},
                {"Strength", null},
                {"Agility", null},
                {"Stamina", null},
                {"Attack Pwr", null},
                {"Hit Rating", null},
                {"Hit Chance", null},
                {"Spell Hit Chance", null},
                {"Crit Rating", null},
                {"MH Crit Chance", null},
                {"OH Crit Chance", null},
                {"Spell Crit Chance", null},
                {"Armor Pen Rating", null},
                {"Expertise Rating", null},
                {"Expertise Dodge", null},
                {"Haste Rating", null}
            },
            new String [] {
                "Stat", "Value"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(statsTable);
        statsTable.getColumnModel().getColumn(1).setCellRenderer(new CPlayerStatsRenderer());

        statsBoostCheckBox.setText("Stats Booster");
        statsBoostCheckBox.setToolTipText("Enabling this check box means that the Stats Booster values are included in your total stats calculations");
        statsBoostCheckBox.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                statsBoostCheckBoxStateChanged(evt);
            }
        });

        javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout(leftPanel);
        leftPanel.setLayout(leftPanelLayout);
        leftPanelLayout.setHorizontalGroup(
            leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftPanelLayout.createSequentialGroup()
                .addGroup(leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(leftPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(importPlayerButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
                            .addGroup(leftPanelLayout.createSequentialGroup()
                                .addComponent(loadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(saveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(playerDetailsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(statusPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)))
                    .addGroup(leftPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(dpsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE))
                    .addGroup(leftPanelLayout.createSequentialGroup()
                        .addGap(70, 70, 70)
                        .addComponent(statsBoostCheckBox)))
                .addContainerGap())
        );
        leftPanelLayout.setVerticalGroup(
            leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(leftPanelLayout.createSequentialGroup()
                .addComponent(playerDetailsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(statusPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(importPlayerButton)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(loadButton)
                    .addComponent(saveButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 285, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(statsBoostCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(dpsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(38, 38, 38))
        );

        javax.swing.GroupLayout topPanelLayout = new javax.swing.GroupLayout(topPanel);
        topPanel.setLayout(topPanelLayout);
        topPanelLayout.setHorizontalGroup(
            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, topPanelLayout.createSequentialGroup()
                .addComponent(leftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        topPanelLayout.setVerticalGroup(
            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, topPanelLayout.createSequentialGroup()
                .addComponent(leftPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        paperDollScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        paperDollScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        paperDollTable.setModel(new paperdoll.CDollTableModel());
        paperDollTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        paperDollTable.setRowSelectionAllowed(false);
        paperDollTable.getTableHeader().setReorderingAllowed(false);
        paperDollTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                paperDollTableMouseClicked(evt);
            }
        });
        paperDollScrollPane.setViewportView(paperDollTable);

        paperDollDescLabel.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        paperDollDescLabel.setText("This is where you setup what your character is wearing and what glyphs/professions your character has");

        paperDollComboBoxesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        professionAComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Alchemy", "Blacksmithing", "Enchanting", "Engineering", "Herbalism", "Inscription", "Jewelcrafting", "Leatherworking", "Mining", "Skinning", "Tailoring" }));
        professionAComboBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                professionAComboBoxItemStateChanged(evt);
            }
        });

        professionBComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Alchemy", "Blacksmithing", "Enchanting", "Engineering", "Herbalism", "Inscription", "Jewelcrafting", "Leatherworking", "Mining", "Skinning", "Tailoring" }));
        professionBComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                professionBComboBoxActionPerformed(evt);
            }
        });

        raceComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Blood Elf", "Dwarf", "Gnome", "Human", "Night Elf", "Orc", "Troll", "Undead" }));
        raceComboBox.setSelectedItem("Undead");
        raceComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                raceComboBoxActionPerformed(evt);
            }
        });

        raceLabel.setText("Race");

        professionsLabel.setText("Professions");

        loadPaperDollButton.setText("Load Paperdoll");
        loadPaperDollButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadPaperDollButtonActionPerformed(evt);
            }
        });

        savePaperDollButton.setText("Save Paperdoll");
        savePaperDollButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                savePaperDollButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paperDollComboBoxesPanelLayout = new javax.swing.GroupLayout(paperDollComboBoxesPanel);
        paperDollComboBoxesPanel.setLayout(paperDollComboBoxesPanelLayout);
        paperDollComboBoxesPanelLayout.setHorizontalGroup(
            paperDollComboBoxesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paperDollComboBoxesPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(professionsLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(paperDollComboBoxesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(professionBComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(professionAComboBox, 0, 120, Short.MAX_VALUE))
                .addGap(26, 26, 26)
                .addComponent(raceLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(raceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(54, 54, 54)
                .addComponent(loadPaperDollButton)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(savePaperDollButton, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(77, 77, 77))
        );
        paperDollComboBoxesPanelLayout.setVerticalGroup(
            paperDollComboBoxesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paperDollComboBoxesPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(paperDollComboBoxesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(professionsLabel)
                    .addComponent(professionAComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(raceLabel)
                    .addComponent(raceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(loadPaperDollButton)
                    .addComponent(savePaperDollButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(professionBComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        javax.swing.GroupLayout GearTabLayout = new javax.swing.GroupLayout(GearTab);
        GearTab.setLayout(GearTabLayout);
        GearTabLayout.setHorizontalGroup(
            GearTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, GearTabLayout.createSequentialGroup()
                .addGroup(GearTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, GearTabLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(paperDollDescLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 731, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, GearTabLayout.createSequentialGroup()
                        .addGap(53, 53, 53)
                        .addGroup(GearTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(paperDollComboBoxesPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 722, Short.MAX_VALUE)
                            .addComponent(paperDollScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 722, Short.MAX_VALUE))))
                .addGap(37, 37, 37))
        );
        GearTabLayout.setVerticalGroup(
            GearTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, GearTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(paperDollDescLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paperDollScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 494, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paperDollComboBoxesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(169, 169, 169))
        );

        TabbedPane.addTab("Paper Doll", GearTab);

        javax.swing.GroupLayout TalentsTabLayout = new javax.swing.GroupLayout(TalentsTab);
        TalentsTab.setLayout(TalentsTabLayout);
        TalentsTabLayout.setHorizontalGroup(
            TalentsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(TalentsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 788, Short.MAX_VALUE)
                .addContainerGap())
        );
        TalentsTabLayout.setVerticalGroup(
            TalentsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(TalentsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 624, Short.MAX_VALUE)
                .addContainerGap())
        );

        TabbedPane.addTab("Talents", TalentsTab);

        jLabel25.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        jLabel25.setText("This tab defines how you play you want the simulator to play your character such as what abilities to use, what abilities have prioirity over others etc");

        jPanel34.setBorder(javax.swing.BorderFactory.createTitledBorder("Target Type"));

        murderableCheckBox.setText("Murderable");
        murderableCheckBox.setToolTipText("<html>When set the target boss is either Humanoid,<BR>\nGiant, Beast or Dragonkin.</html>");

        javax.swing.GroupLayout jPanel34Layout = new javax.swing.GroupLayout(jPanel34);
        jPanel34.setLayout(jPanel34Layout);
        jPanel34Layout.setHorizontalGroup(
            jPanel34Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel34Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(murderableCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel34Layout.setVerticalGroup(
            jPanel34Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel34Layout.createSequentialGroup()
                .addComponent(murderableCheckBox)
                .addContainerGap(8, Short.MAX_VALUE))
        );

        loadPlayStyleButton.setText("Load PlayStyle");
        loadPlayStyleButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadPlayStyleButtonActionPerformed(evt);
            }
        });

        savePlayStyleButton.setText("Save PlayStyle");
        savePlayStyleButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                savePlayStyleButtonActionPerformed(evt);
            }
        });

        playStyleTextArea.setColumns(20);
        playStyleTextArea.setFont(new java.awt.Font("Arial", 0, 13)); // NOI18N
        playStyleTextArea.setRows(5);
        jScrollPane9.setViewportView(playStyleTextArea);

        testButton.setText("jButton1");
        testButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                testButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel41Layout = new javax.swing.GroupLayout(jPanel41);
        jPanel41.setLayout(jPanel41Layout);
        jPanel41Layout.setHorizontalGroup(
            jPanel41Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel41Layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addGroup(jPanel41Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(testButton)
                    .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 739, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel41Layout.createSequentialGroup()
                        .addComponent(loadPlayStyleButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(savePlayStyleButton))
                    .addComponent(jPanel34, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(26, Short.MAX_VALUE))
        );
        jPanel41Layout.setVerticalGroup(
            jPanel41Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel41Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel34, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 234, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(testButton)
                .addGap(57, 57, 57)
                .addGroup(jPanel41Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(loadPlayStyleButton)
                    .addComponent(savePlayStyleButton))
                .addContainerGap(150, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Style", jPanel41);

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("HAT Crit Per Second Calculator"));

        jLabel7.setText("Fight length in seconds");

        fightTimeCalcFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));

        jLabel8.setText("Number of Crits");

        numberOfCritsCalcFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));

        calcCPSTextField.setEditable(false);
        calcCPSTextField.setText("0.0");

        jLabel9.setText("Crits Per Second");

        calculateCritsPerSecondButton.setText("Calculate Crits Per Second");
        calculateCritsPerSecondButton.setToolTipText("Calculates the number of crits per second");
        calculateCritsPerSecondButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                calculateCritsPerSecondButtonActionPerformed(evt);
            }
        });

        copyCPStoClipboardCheckBox.setSelected(true);
        copyCPStoClipboardCheckBox.setText("Copy result to clipboard");
        copyCPStoClipboardCheckBox.setToolTipText("When enabled the result will be pasted into the system clipboard for easy pasting");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(calcCPSTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
                            .addComponent(numberOfCritsCalcFormattedTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
                            .addComponent(fightTimeCalcFormattedTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)))
                    .addComponent(calculateCritsPerSecondButton, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(copyCPStoClipboardCheckBox))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel7)
                    .addComponent(fightTimeCalcFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel8)
                    .addComponent(numberOfCritsCalcFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(calcCPSTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel9))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
                .addComponent(copyCPStoClipboardCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(calculateCritsPerSecondButton))
        );

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("HAT Party Group"));

        hat4CPSFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));

        hat3ClassComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Death Knight", "Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlcok", "Warrior" }));
        hat3ClassComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                hat3ClassComboBoxActionPerformed(evt);
            }
        });

        hat4ClassComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Death Knight", "Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlcok", "Warrior" }));
        hat4ClassComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                hat4ClassComboBoxActionPerformed(evt);
            }
        });

        hat1ClassComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Death Knight", "Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlcok", "Warrior" }));
        hat1ClassComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                hat1ClassComboBoxActionPerformed(evt);
            }
        });

        hat2ClassComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "None", "Death Knight", "Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlcok", "Warrior" }));
        hat2ClassComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                hat2ClassComboBoxActionPerformed(evt);
            }
        });

        jLabel4.setText("Party Members");

        hat1CPSFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));

        hat3CPSFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));

        hat2CPSFormattedTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));

        jLabel5.setText("Crits Per Second");

        loadHATButton.setText("Load HAT Party Group");
        loadHATButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadHATButtonActionPerformed(evt);
            }
        });

        saveHATButton.setText("Save HAT Party Group");
        saveHATButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveHATButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel4)
                            .addComponent(hat1ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(hat2ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(hat3ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(hat4ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(40, 40, 40)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(hat4CPSFormattedTextField, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(hat3CPSFormattedTextField, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(hat2CPSFormattedTextField, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(hat1CPSFormattedTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE))
                            .addComponent(jLabel5)))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(loadHATButton)
                        .addGap(18, 18, 18)
                        .addComponent(saveHATButton)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(hat1ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(hat1CPSFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(hat2ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(hat2CPSFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(hat3ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(hat3CPSFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(hat4ClassComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(hat4CPSFormattedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(loadHATButton)
                    .addComponent(saveHATButton))
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel42Layout = new javax.swing.GroupLayout(jPanel42);
        jPanel42.setLayout(jPanel42Layout);
        jPanel42Layout.setHorizontalGroup(
            jPanel42Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel42Layout.createSequentialGroup()
                .addContainerGap(71, Short.MAX_VALUE)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(39, 39, 39)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(72, 72, 72))
        );
        jPanel42Layout.setVerticalGroup(
            jPanel42Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel42Layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addGroup(jPanel42Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(334, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("HAT", jPanel42);

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel25, javax.swing.GroupLayout.PREFERRED_SIZE, 757, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 788, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel25)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 604, Short.MAX_VALUE)
                .addContainerGap())
        );

        TabbedPane.addTab("Play Style", jPanel6);

        jLabel20.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        jLabel20.setText("In this tab you select the raid buffs/debuff that your character will experience during a fight against a boss. A buff is assumed to be max talented.");

        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Target Debuffs"));

        jPanel23.setBorder(javax.swing.BorderFactory.createTitledBorder("Armor Pen"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.EXPOSE_ARMOR, exposeArmorCheckBox);
        exposeArmorCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        exposeArmorCheckBox.setForeground(new java.awt.Color(153, 153, 0));
        exposeArmorCheckBox.setText("Expose Armor");
        exposeArmorCheckBox.setToolTipText("Rogue : 20% reduced armor");
        exposeArmorCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                exposeArmorCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.SUNDER_ARMOR, sunderArmorCheckBox);
        sunderArmorCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        sunderArmorCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        sunderArmorCheckBox.setText("Sunder Armor");
        sunderArmorCheckBox.setToolTipText("Warrior : 20% reduced armor");
        sunderArmorCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                sunderArmorCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel23Layout = new javax.swing.GroupLayout(jPanel23);
        jPanel23.setLayout(jPanel23Layout);
        jPanel23Layout.setHorizontalGroup(
            jPanel23Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel23Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel23Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(sunderArmorCheckBox)
                    .addComponent(exposeArmorCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel23Layout.setVerticalGroup(
            jPanel23Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel23Layout.createSequentialGroup()
                .addComponent(sunderArmorCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(exposeArmorCheckBox))
        );

        jPanel24.setBorder(javax.swing.BorderFactory.createTitledBorder("Armor Pen"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.COW, cowCheckBox);
        cowCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        cowCheckBox.setForeground(new java.awt.Color(153, 0, 153));
        cowCheckBox.setText("Curse of Weakness");
        cowCheckBox.setToolTipText("Warlock: 5% armor reduction");
        cowCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cowCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.FAERIE_FIRE, faerieFireCheckBox);
        faerieFireCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        faerieFireCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        faerieFireCheckBox.setText("Faerie Fire");
        faerieFireCheckBox.setToolTipText("Druid (Feral): 5% armor reduction");
        faerieFireCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                faerieFireCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.STING, stingCheckBox);
        stingCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        stingCheckBox.setForeground(new java.awt.Color(0, 153, 0));
        stingCheckBox.setText("Sting");
        stingCheckBox.setToolTipText("Hunter's Pet: 5% armor reduction");
        stingCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                stingCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel24Layout = new javax.swing.GroupLayout(jPanel24);
        jPanel24.setLayout(jPanel24Layout);
        jPanel24Layout.setHorizontalGroup(
            jPanel24Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel24Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel24Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(faerieFireCheckBox)
                    .addComponent(stingCheckBox)
                    .addComponent(cowCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel24Layout.setVerticalGroup(
            jPanel24Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel24Layout.createSequentialGroup()
                .addComponent(faerieFireCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(stingCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cowCheckBox))
        );

        jPanel25.setBorder(javax.swing.BorderFactory.createTitledBorder("Bleed"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.TRAUMA, traumaCheckBox);
        traumaCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        traumaCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        traumaCheckBox.setText("Trauma");
        traumaCheckBox.setToolTipText("Warrior: 30% extra damage from bleed effects");
        traumaCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                traumaCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.MANGLE, mangleCheckBox);
        mangleCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        mangleCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        mangleCheckBox.setText("Mangle");
        mangleCheckBox.setToolTipText("Druid: 30% extra damage from bleed effects");
        mangleCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                mangleCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel25Layout = new javax.swing.GroupLayout(jPanel25);
        jPanel25.setLayout(jPanel25Layout);
        jPanel25Layout.setHorizontalGroup(
            jPanel25Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel25Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel25Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(mangleCheckBox)
                    .addComponent(traumaCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel25Layout.setVerticalGroup(
            jPanel25Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel25Layout.createSequentialGroup()
                .addComponent(mangleCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(traumaCheckBox))
        );

        jPanel26.setBorder(javax.swing.BorderFactory.createTitledBorder("Crit"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.MASTER_POISONER, masterPoisonerCheckBox);
        masterPoisonerCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        masterPoisonerCheckBox.setForeground(new java.awt.Color(153, 153, 0));
        masterPoisonerCheckBox.setText("Master Poisoner");
        masterPoisonerCheckBox.setToolTipText("Rogue: 3% extra crit chance");
        masterPoisonerCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                masterPoisonerCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.HOTC, hotcCheckBox);
        hotcCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        hotcCheckBox.setForeground(new java.awt.Color(255, 102, 255));
        hotcCheckBox.setText("Heart of the Crusader");
        hotcCheckBox.setToolTipText("Paladin: 3% extra crit chance");
        hotcCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                hotcCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.TOTEM_OF_WRATH, totemOfWrathCheckBox);
        totemOfWrathCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        totemOfWrathCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        totemOfWrathCheckBox.setText("Totem of Wrath");
        totemOfWrathCheckBox.setToolTipText("Shaman: 3% extra crit chance");
        totemOfWrathCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                totemOfWrathCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel26Layout = new javax.swing.GroupLayout(jPanel26);
        jPanel26.setLayout(jPanel26Layout);
        jPanel26Layout.setHorizontalGroup(
            jPanel26Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel26Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel26Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(hotcCheckBox)
                    .addComponent(masterPoisonerCheckBox)
                    .addComponent(totemOfWrathCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel26Layout.setVerticalGroup(
            jPanel26Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel26Layout.createSequentialGroup()
                .addComponent(hotcCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(masterPoisonerCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(totemOfWrathCheckBox))
        );

        jPanel27.setBorder(javax.swing.BorderFactory.createTitledBorder("Physical Damage"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.BLOOD_FRENZY, bloodFrenzyCheckBox);
        bloodFrenzyCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        bloodFrenzyCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        bloodFrenzyCheckBox.setText("Blood Frenzy");
        bloodFrenzyCheckBox.setToolTipText("Warrior: 2% extra physical damage");
        bloodFrenzyCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bloodFrenzyCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.SAVAGE_COMBAT, savageCombatCheckBox);
        savageCombatCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        savageCombatCheckBox.setForeground(new java.awt.Color(153, 153, 0));
        savageCombatCheckBox.setText("Savage Combat");
        savageCombatCheckBox.setToolTipText("Rogue: 2% extra physical damage");
        savageCombatCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                savageCombatCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel27Layout = new javax.swing.GroupLayout(jPanel27);
        jPanel27.setLayout(jPanel27Layout);
        jPanel27Layout.setHorizontalGroup(
            jPanel27Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel27Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel27Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(savageCombatCheckBox)
                    .addComponent(bloodFrenzyCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel27Layout.setVerticalGroup(
            jPanel27Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel27Layout.createSequentialGroup()
                .addComponent(savageCombatCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(bloodFrenzyCheckBox))
        );

        jPanel28.setBorder(javax.swing.BorderFactory.createTitledBorder("Spell Crit"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.WINTERS_CHILL, wintersChillCheckBox);
        wintersChillCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        wintersChillCheckBox.setForeground(new java.awt.Color(0, 153, 153));
        wintersChillCheckBox.setText("Winter's Chill");
        wintersChillCheckBox.setToolTipText("Mage: 2% extra spell crit chance");
        wintersChillCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                wintersChillCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.IMPROVED_SCORCH, improvedScorchCheckBox);
        improvedScorchCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        improvedScorchCheckBox.setForeground(new java.awt.Color(0, 153, 153));
        improvedScorchCheckBox.setText("Improved Scorch");
        improvedScorchCheckBox.setToolTipText("Mage: 2% extra spell crit chance");
        improvedScorchCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                improvedScorchCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel28Layout = new javax.swing.GroupLayout(jPanel28);
        jPanel28.setLayout(jPanel28Layout);
        jPanel28Layout.setHorizontalGroup(
            jPanel28Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel28Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel28Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(improvedScorchCheckBox)
                    .addComponent(wintersChillCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel28Layout.setVerticalGroup(
            jPanel28Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel28Layout.createSequentialGroup()
                .addComponent(improvedScorchCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(wintersChillCheckBox))
        );

        jPanel29.setBorder(javax.swing.BorderFactory.createTitledBorder("Spell Damage"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.COE, coeCheckBox);
        coeCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        coeCheckBox.setForeground(new java.awt.Color(153, 0, 153));
        coeCheckBox.setText("Curse of Elements");
        coeCheckBox.setToolTipText("Warlock: 13% extra magic damage");
        coeCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                coeCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.EARTH_AND_MOON, earthAndMoonCheckBox);
        earthAndMoonCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        earthAndMoonCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        earthAndMoonCheckBox.setText("Earth and Moon");
        earthAndMoonCheckBox.setToolTipText("Druid: 13% extra magic damage");
        earthAndMoonCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                earthAndMoonCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.EBON_PLAGUEBRINGER, ebonPlagueBringerCheckBox);
        ebonPlagueBringerCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        ebonPlagueBringerCheckBox.setForeground(new java.awt.Color(255, 0, 51));
        ebonPlagueBringerCheckBox.setText("Ebon Plague Bringer");
        ebonPlagueBringerCheckBox.setToolTipText("Death Knight: 13% extra magic damage");
        ebonPlagueBringerCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                ebonPlagueBringerCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel29Layout = new javax.swing.GroupLayout(jPanel29);
        jPanel29.setLayout(jPanel29Layout);
        jPanel29Layout.setHorizontalGroup(
            jPanel29Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel29Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel29Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(ebonPlagueBringerCheckBox)
                    .addComponent(earthAndMoonCheckBox)
                    .addComponent(coeCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel29Layout.setVerticalGroup(
            jPanel29Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel29Layout.createSequentialGroup()
                .addComponent(ebonPlagueBringerCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(earthAndMoonCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(coeCheckBox))
        );

        jPanel30.setBorder(javax.swing.BorderFactory.createTitledBorder("Spell Hit"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.IMPROVED_FAERIE_FIRE, improvedFaerieFireCheckBox);
        improvedFaerieFireCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        improvedFaerieFireCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        improvedFaerieFireCheckBox.setText("Improved Faerie Fire");
        improvedFaerieFireCheckBox.setToolTipText("Druid: 3% Extra spell hit chance");
        improvedFaerieFireCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                improvedFaerieFireCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.MISERY, miseryCheckBox);
        miseryCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        miseryCheckBox.setForeground(new java.awt.Color(102, 102, 102));
        miseryCheckBox.setText("Misery");
        miseryCheckBox.setToolTipText("Priest: 3% Extra spell hit chance");
        miseryCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                miseryCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel30Layout = new javax.swing.GroupLayout(jPanel30);
        jPanel30.setLayout(jPanel30Layout);
        jPanel30Layout.setHorizontalGroup(
            jPanel30Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel30Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel30Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(improvedFaerieFireCheckBox)
                    .addComponent(miseryCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel30Layout.setVerticalGroup(
            jPanel30Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel30Layout.createSequentialGroup()
                .addComponent(improvedFaerieFireCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(miseryCheckBox))
        );

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel23, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel25, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel26, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel27, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel24, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel28, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel29, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel30, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addComponent(jPanel23, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel25, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel26, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel27, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addComponent(jPanel24, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel28, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel29, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel30, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("Raid Buffs"));

        jPanel9.setBorder(javax.swing.BorderFactory.createTitledBorder("Agility & Strength"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.STRENGTH_OF_EARTH, strengthOfEarthCheckBox);
        strengthOfEarthCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        strengthOfEarthCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        strengthOfEarthCheckBox.setText("Strength of Earth Totem");
        strengthOfEarthCheckBox.setToolTipText("Shaman: 178 Agility & 178 Strength");
        strengthOfEarthCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                strengthOfEarthCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.HORN_OF_WINTER, hornOfWinterCheckBox);
        hornOfWinterCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        hornOfWinterCheckBox.setForeground(new java.awt.Color(255, 0, 51));
        hornOfWinterCheckBox.setText("Horn of Winter");
        hornOfWinterCheckBox.setToolTipText("Death Knight: 155 Agility & 155 Strength");
        hornOfWinterCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                hornOfWinterCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
        jPanel9.setLayout(jPanel9Layout);
        jPanel9Layout.setHorizontalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel9Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(hornOfWinterCheckBox)
                    .addComponent(strengthOfEarthCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel9Layout.setVerticalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel9Layout.createSequentialGroup()
                .addComponent(hornOfWinterCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(strengthOfEarthCheckBox)
                .addContainerGap())
        );

        jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Attack Power (Flat)"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.BOM, bomCheckBox);
        bomCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        bomCheckBox.setForeground(new java.awt.Color(255, 102, 255));
        bomCheckBox.setText("Blessing of Might");
        bomCheckBox.setToolTipText("Paladin: 688 Attack Power");
        bomCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bomCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.BATTLE_SHOUT, battleShoutCheckBox);
        battleShoutCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        battleShoutCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        battleShoutCheckBox.setText("Battle Shout");
        battleShoutCheckBox.setToolTipText("Warrior: 548 Attack Power");
        battleShoutCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                battleShoutCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
        jPanel10.setLayout(jPanel10Layout);
        jPanel10Layout.setHorizontalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(bomCheckBox)
                    .addComponent(battleShoutCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel10Layout.setVerticalGroup(
            jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel10Layout.createSequentialGroup()
                .addComponent(bomCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(battleShoutCheckBox)
                .addContainerGap())
        );

        jPanel11.setBorder(javax.swing.BorderFactory.createTitledBorder("Attack Power (Multiply)"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.TRUESHOT_AURA, trueShotAuraCheckBox);
        trueShotAuraCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        trueShotAuraCheckBox.setForeground(new java.awt.Color(0, 153, 51));
        trueShotAuraCheckBox.setText("Trueshot Aura");
        trueShotAuraCheckBox.setToolTipText("Hunter (Marksmanship): 10% extra attack power");
        trueShotAuraCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                trueShotAuraCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.UNLEASHED_RAGE, unleashedRageCheckBox);
        unleashedRageCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        unleashedRageCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        unleashedRageCheckBox.setText("Unleashed Rage");
        unleashedRageCheckBox.setToolTipText("Shaman (Enhancement): 10% extra attack power");
        unleashedRageCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                unleashedRageCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.ABOMINATIONS_MIGHT, abominationsMightCheckBox);
        abominationsMightCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        abominationsMightCheckBox.setForeground(new java.awt.Color(255, 0, 0));
        abominationsMightCheckBox.setText("Abomination's Might");
        abominationsMightCheckBox.setToolTipText("Death Knight: 10% extra attack power");
        abominationsMightCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                abominationsMightCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11);
        jPanel11.setLayout(jPanel11Layout);
        jPanel11Layout.setHorizontalGroup(
            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel11Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(abominationsMightCheckBox)
                    .addComponent(trueShotAuraCheckBox)
                    .addComponent(unleashedRageCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel11Layout.setVerticalGroup(
            jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel11Layout.createSequentialGroup()
                .addComponent(abominationsMightCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(trueShotAuraCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(unleashedRageCheckBox))
        );

        jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder("Damage"));

        CGlobal.g_raidBuffs.addElement(RaidBuff.SANCTIFIED_RETRIBUTION, sanctifiedRetributionCheckBox);
        sanctifiedRetributionCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        sanctifiedRetributionCheckBox.setForeground(new java.awt.Color(255, 102, 255));
        sanctifiedRetributionCheckBox.setText("Sanctified Retribution");
        sanctifiedRetributionCheckBox.setToolTipText("Paladin: 3% extra damage");
        sanctifiedRetributionCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                sanctifiedRetributionCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(RaidBuff.FEROCIOUS_INSPIRATION, ferociousInspirationCheckBox);
        ferociousInspirationCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        ferociousInspirationCheckBox.setForeground(new java.awt.Color(0, 153, 0));
        ferociousInspirationCheckBox.setText("Ferocious Inspiration");
        ferociousInspirationCheckBox.setToolTipText("Hunter (Beat Mastery): 3% extra damage");
        ferociousInspirationCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                ferociousInspirationCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12);
        jPanel12.setLayout(jPanel12Layout);
        jPanel12Layout.setHorizontalGroup(
            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel12Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(ferociousInspirationCheckBox)
                    .addComponent(sanctifiedRetributionCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel12Layout.setVerticalGroup(
            jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel12Layout.createSequentialGroup()
                .addComponent(ferociousInspirationCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(sanctifiedRetributionCheckBox)
                .addContainerGap())
        );

        jPanel13.setBorder(javax.swing.BorderFactory.createTitledBorder("Haste"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.IMPROVED_MOONKIN_FORM,
            improvedMoonkinFormCheckBox);
        improvedMoonkinFormCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        improvedMoonkinFormCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        improvedMoonkinFormCheckBox.setText("Improved Moonkin Form");
        improvedMoonkinFormCheckBox.setToolTipText("Druid: 3% extra haste");
        improvedMoonkinFormCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                improvedMoonkinFormCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.SWIFT_RETRIBUTION,
            swiftRetributionCheckBox);
        swiftRetributionCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        swiftRetributionCheckBox.setForeground(new java.awt.Color(255, 102, 255));
        swiftRetributionCheckBox.setText("Swift Retribution");
        swiftRetributionCheckBox.setToolTipText("Paladin: 3% extra haste");
        swiftRetributionCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                swiftRetributionCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13);
        jPanel13.setLayout(jPanel13Layout);
        jPanel13Layout.setHorizontalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(improvedMoonkinFormCheckBox)
                    .addComponent(swiftRetributionCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel13Layout.setVerticalGroup(
            jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel13Layout.createSequentialGroup()
                .addComponent(improvedMoonkinFormCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(swiftRetributionCheckBox)
                .addContainerGap())
        );

        jPanel14.setBorder(javax.swing.BorderFactory.createTitledBorder("Health"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.BLOOD_PACT,
            bloodPactCheckBox);
        bloodPactCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        bloodPactCheckBox.setForeground(new java.awt.Color(153, 0, 153));
        bloodPactCheckBox.setText("Blood Pact");
        bloodPactCheckBox.setToolTipText("Warlock: Increase health by 1330");
        bloodPactCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bloodPactCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.COMMANDING_SHOUT,
            commandingShoutCheckBox);
        commandingShoutCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        commandingShoutCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        commandingShoutCheckBox.setText("Commanding Shout");
        commandingShoutCheckBox.setToolTipText("Warrior: Increase health by 2255");
        commandingShoutCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                commandingShoutCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14);
        jPanel14.setLayout(jPanel14Layout);
        jPanel14Layout.setHorizontalGroup(
            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel14Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(bloodPactCheckBox)
                    .addComponent(commandingShoutCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel14Layout.setVerticalGroup(
            jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel14Layout.createSequentialGroup()
                .addComponent(bloodPactCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(commandingShoutCheckBox))
        );

        jPanel15.setBorder(javax.swing.BorderFactory.createTitledBorder("Stamina"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.FORTITUDE,
            pwfCheckBox);
        pwfCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        pwfCheckBox.setForeground(new java.awt.Color(102, 102, 102));
        pwfCheckBox.setText("Power Word Fortitude");
        pwfCheckBox.setToolTipText("Priest: 165 extra stamina");
        pwfCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                pwfCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15);
        jPanel15.setLayout(jPanel15Layout);
        jPanel15Layout.setHorizontalGroup(
            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel15Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(pwfCheckBox))
        );
        jPanel15Layout.setVerticalGroup(
            jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pwfCheckBox)
        );

        jPanel16.setBorder(javax.swing.BorderFactory.createTitledBorder("Haste Temp Buff"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.BLOODLUST,
            bloodlustCheckBox);
        bloodlustCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        bloodlustCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        bloodlustCheckBox.setText("Bloodlust");
        bloodlustCheckBox.setToolTipText("Shaman: Bloodlust will be used");
        bloodlustCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bloodlustCheckBoxItemStateChanged(evt);
            }
        });
        bloodlustCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bloodlustCheckBoxActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel16Layout = new javax.swing.GroupLayout(jPanel16);
        jPanel16.setLayout(jPanel16Layout);
        jPanel16Layout.setHorizontalGroup(
            jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel16Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(bloodlustCheckBox)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel16Layout.setVerticalGroup(
            jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(bloodlustCheckBox)
        );

        jPanel17.setBorder(javax.swing.BorderFactory.createTitledBorder("Stats (Multiplier)"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.BOK,
            bokCheckBox);
        bokCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        bokCheckBox.setForeground(new java.awt.Color(255, 102, 255));
        bokCheckBox.setText("Blessing of Kings");
        bokCheckBox.setToolTipText("Paladin: 10% increase of all stats");
        bokCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                bokCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel17Layout = new javax.swing.GroupLayout(jPanel17);
        jPanel17.setLayout(jPanel17Layout);
        jPanel17Layout.setHorizontalGroup(
            jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel17Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(bokCheckBox)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel17Layout.setVerticalGroup(
            jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(bokCheckBox)
        );

        jPanel18.setBorder(javax.swing.BorderFactory.createTitledBorder("Stats (Flat)"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.MOTW,
            motwCheckBox);
        motwCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        motwCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        motwCheckBox.setText("Mark of the Wild");
        motwCheckBox.setToolTipText("Druid: All attributes increase by 51.8");
        motwCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                motwCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel18Layout = new javax.swing.GroupLayout(jPanel18);
        jPanel18.setLayout(jPanel18Layout);
        jPanel18Layout.setHorizontalGroup(
            jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel18Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(motwCheckBox)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel18Layout.setVerticalGroup(
            jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(motwCheckBox)
        );

        jPanel19.setBorder(javax.swing.BorderFactory.createTitledBorder("Draenei Racial Aura"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.HEROIC_PRESENCE,
            heroicPresence);
        heroicPresence.setFont(new java.awt.Font("Tahoma", 1, 11));
        heroicPresence.setText("Heroic Presence");
        heroicPresence.setToolTipText("Draenei: 1% chance to hit");
        heroicPresence.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                heroicPresenceItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel19Layout = new javax.swing.GroupLayout(jPanel19);
        jPanel19.setLayout(jPanel19Layout);
        jPanel19Layout.setHorizontalGroup(
            jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel19Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(heroicPresence)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel19Layout.setVerticalGroup(
            jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(heroicPresence)
        );

        jPanel20.setBorder(javax.swing.BorderFactory.createTitledBorder("Melee Crit"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.RAMPAGE,
            rampageCheckBox);
        rampageCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        rampageCheckBox.setForeground(new java.awt.Color(102, 51, 0));
        rampageCheckBox.setText("Rampage");
        rampageCheckBox.setToolTipText("Warrior: 5% extra melee crit chance");
        rampageCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                rampageCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.LOTP,
            lotpCheckBox);
        lotpCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        lotpCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        lotpCheckBox.setText("Leader of the Pack");
        lotpCheckBox.setToolTipText("Druid: 5% extra melee crit chance");
        lotpCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                lotpCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel20Layout = new javax.swing.GroupLayout(jPanel20);
        jPanel20.setLayout(jPanel20Layout);
        jPanel20Layout.setHorizontalGroup(
            jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel20Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lotpCheckBox)
                    .addComponent(rampageCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel20Layout.setVerticalGroup(
            jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel20Layout.createSequentialGroup()
                .addComponent(lotpCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(rampageCheckBox))
        );

        jPanel21.setBorder(javax.swing.BorderFactory.createTitledBorder("Melee Haste"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.IMPROVED_ICY_TALONS,
            improvedIcyTalonsCheckBox);
        improvedIcyTalonsCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        improvedIcyTalonsCheckBox.setForeground(new java.awt.Color(255, 0, 51));
        improvedIcyTalonsCheckBox.setText("Improved Icy Talons");
        improvedIcyTalonsCheckBox.setToolTipText("Death Knight: 20% extra melee haste");
        improvedIcyTalonsCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                improvedIcyTalonsCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.WINDFURY_TOTEM,
            windfuryTotemCheckBox);
        windfuryTotemCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        windfuryTotemCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        windfuryTotemCheckBox.setText("Windfury Totem");
        windfuryTotemCheckBox.setToolTipText("Shaman (Enhancement): 20% extra melee haste");
        windfuryTotemCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                windfuryTotemCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel21Layout = new javax.swing.GroupLayout(jPanel21);
        jPanel21.setLayout(jPanel21Layout);
        jPanel21Layout.setHorizontalGroup(
            jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel21Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(improvedIcyTalonsCheckBox)
                    .addComponent(windfuryTotemCheckBox)))
        );
        jPanel21Layout.setVerticalGroup(
            jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel21Layout.createSequentialGroup()
                .addComponent(improvedIcyTalonsCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(windfuryTotemCheckBox))
        );

        jPanel22.setBorder(javax.swing.BorderFactory.createTitledBorder("Spell Crit"));

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.ELEMENTAL_OATH,
            elementalOathCheckBox);
        elementalOathCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        elementalOathCheckBox.setForeground(new java.awt.Color(0, 51, 204));
        elementalOathCheckBox.setText("Elemental Oath");
        elementalOathCheckBox.setToolTipText("Shaman (Elemental): 5% extra spell crit chance");
        elementalOathCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                elementalOathCheckBoxItemStateChanged(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.MOONKIN_AURA,
            moonkinAuraCheckBox);
        moonkinAuraCheckBox.setFont(new java.awt.Font("Tahoma", 1, 11));
        moonkinAuraCheckBox.setForeground(new java.awt.Color(255, 102, 0));
        moonkinAuraCheckBox.setText("Moonkin Aura");
        moonkinAuraCheckBox.setToolTipText("Druid: 5% extra spell crit chance");
        moonkinAuraCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                moonkinAuraCheckBoxItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel22Layout = new javax.swing.GroupLayout(jPanel22);
        jPanel22.setLayout(jPanel22Layout);
        jPanel22Layout.setHorizontalGroup(
            jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel22Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(moonkinAuraCheckBox)
                    .addComponent(elementalOathCheckBox))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel22Layout.setVerticalGroup(
            jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel22Layout.createSequentialGroup()
                .addComponent(moonkinAuraCheckBox)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(elementalOathCheckBox))
        );

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel19, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel22, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(jPanel19, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel22, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jPanel31.setBorder(javax.swing.BorderFactory.createTitledBorder("Consumables"));

        jLabel29.setText("Scrolls");

        jLabel28.setText("Food");

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.FOOD_BUFF,
            foodComboBox);
        foodComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Agility Food", "Attack Power Food", "Armor Pen Food", "Crit Food", "Expertise Food", "Haste Food", "Hit Food", "None" }));
        foodComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                foodComboBoxActionPerformed(evt);
            }
        });

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.SCROLL,
            scrollsComboBox);
        scrollsComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Agility VI", "Strength VI", "None" }));
        scrollsComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                scrollsComboBoxActionPerformed(evt);
            }
        });

        jLabel27.setText("Elixir/Flask");

        CGlobal.g_raidBuffs.addElement(
            RaidBuff.ELIXIR,
            flaskComboBox);
        flaskComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Flask of Endless Rage", "Elixir of Demonslaying", "Elixir of Mighty Agility", "Elixir of Major Agility", "None" }));
        flaskComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                flaskComboBoxActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel31Layout = new javax.swing.GroupLayout(jPanel31);
        jPanel31.setLayout(jPanel31Layout);
        jPanel31Layout.setHorizontalGroup(
            jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel31Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel28)
                    .addComponent(jLabel27)
                    .addComponent(jLabel29))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(scrollsComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(foodComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(flaskComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel31Layout.setVerticalGroup(
            jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel31Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel27, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(flaskComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel28, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(foodComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(12, 12, 12)
                .addGroup(jPanel31Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel29)
                    .addComponent(scrollsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jButton3.setText("Load Buffs");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setText("Save Buffs");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout BuffsTabLayout = new javax.swing.GroupLayout(BuffsTab);
        BuffsTab.setLayout(BuffsTabLayout);
        BuffsTabLayout.setHorizontalGroup(
            BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(BuffsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 773, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(BuffsTabLayout.createSequentialGroup()
                        .addGroup(BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(BuffsTabLayout.createSequentialGroup()
                                .addComponent(jPanel31, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addGroup(BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)))
                            .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(71, 71, 71))
        );
        BuffsTabLayout.setVerticalGroup(
            BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(BuffsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(BuffsTabLayout.createSequentialGroup()
                        .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(BuffsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(BuffsTabLayout.createSequentialGroup()
                                .addGap(33, 33, 33)
                                .addComponent(jButton3)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton4))
                            .addGroup(BuffsTabLayout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jPanel31, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(39, Short.MAX_VALUE))
        );

        TabbedPane.addTab("Raid Buffs", BuffsTab);

        jPanel5.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        agilitySlider.setMajorTickSpacing(10);
        agilitySlider.setMaximum(200);
        agilitySlider.setMinimum(-200);
        agilitySlider.setMinorTickSpacing(1);
        agilitySlider.setPaintTicks(true);
        agilitySlider.setSnapToTicks(true);
        agilitySlider.setValue(0);
        agilitySlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Agility"));
        agilitySlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                agilitySliderStateChanged(evt);
            }
        });

        armorPenRatingSlider.setMajorTickSpacing(10);
        armorPenRatingSlider.setMaximum(400);
        armorPenRatingSlider.setMinimum(-400);
        armorPenRatingSlider.setMinorTickSpacing(1);
        armorPenRatingSlider.setPaintTicks(true);
        armorPenRatingSlider.setSnapToTicks(true);
        armorPenRatingSlider.setValue(0);
        armorPenRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Armor Pen Rating"));
        armorPenRatingSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                armorPenRatingSliderStateChanged(evt);
            }
        });

        attackPowerSlider.setMajorTickSpacing(10);
        attackPowerSlider.setMaximum(1000);
        attackPowerSlider.setMinimum(-1000);
        attackPowerSlider.setMinorTickSpacing(10);
        attackPowerSlider.setPaintTicks(true);
        attackPowerSlider.setSnapToTicks(true);
        attackPowerSlider.setValue(0);
        attackPowerSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Attack Power"));
        attackPowerSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                attackPowerSliderStateChanged(evt);
            }
        });

        strengthSlider.setMajorTickSpacing(10);
        strengthSlider.setMinimum(-100);
        strengthSlider.setMinorTickSpacing(1);
        strengthSlider.setPaintTicks(true);
        strengthSlider.setSnapToTicks(true);
        strengthSlider.setValue(0);
        strengthSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Strength"));
        strengthSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                strengthSliderStateChanged(evt);
            }
        });

        hasteRatingSlider.setMajorTickSpacing(10);
        hasteRatingSlider.setMaximum(200);
        hasteRatingSlider.setMinimum(-200);
        hasteRatingSlider.setMinorTickSpacing(1);
        hasteRatingSlider.setPaintTicks(true);
        hasteRatingSlider.setSnapToTicks(true);
        hasteRatingSlider.setValue(0);
        hasteRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Haste Rating"));
        hasteRatingSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                hasteRatingSliderStateChanged(evt);
            }
        });

        critRatingSlider.setMajorTickSpacing(10);
        critRatingSlider.setMinimum(-100);
        critRatingSlider.setMinorTickSpacing(1);
        critRatingSlider.setPaintTicks(true);
        critRatingSlider.setSnapToTicks(true);
        critRatingSlider.setValue(0);
        critRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Crit Rating"));
        critRatingSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                critRatingSliderStateChanged(evt);
            }
        });

        hitRatingSlider.setMajorTickSpacing(10);
        hitRatingSlider.setMaximum(200);
        hitRatingSlider.setMinimum(-200);
        hitRatingSlider.setMinorTickSpacing(1);
        hitRatingSlider.setPaintTicks(true);
        hitRatingSlider.setSnapToTicks(true);
        hitRatingSlider.setValue(0);
        hitRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Hit Rating"));
        hitRatingSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                hitRatingSliderStateChanged(evt);
            }
        });

        expertiseRatingSlider.setMajorTickSpacing(10);
        expertiseRatingSlider.setMinimum(-100);
        expertiseRatingSlider.setMinorTickSpacing(1);
        expertiseRatingSlider.setPaintTicks(true);
        expertiseRatingSlider.setSnapToTicks(true);
        expertiseRatingSlider.setValue(0);
        expertiseRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Expertise Rating"));
        expertiseRatingSlider.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                expertiseRatingSliderStateChanged(evt);
            }
        });

        resetBoostButton.setText("Reset");
        resetBoostButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                resetBoostButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel5Layout.createSequentialGroup()
                        .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(agilitySlider, javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
                            .addComponent(hasteRatingSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
                            .addComponent(critRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 471, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(armorPenRatingSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
                            .addComponent(attackPowerSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 689, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(expertiseRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 689, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(strengthSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
                            .addComponent(hitRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 689, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                        .addComponent(resetBoostButton)
                        .addGap(322, 322, 322))))
        );

        jPanel5Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {agilitySlider, armorPenRatingSlider, attackPowerSlider, critRatingSlider, hasteRatingSlider, strengthSlider});

        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(agilitySlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(hasteRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(critRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0)
                .addComponent(armorPenRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(attackPowerSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(expertiseRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(strengthSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(hitRatingSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(resetBoostButton)
                .addGap(88, 88, 88))
        );

        jPanel5Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {agilitySlider, armorPenRatingSlider, attackPowerSlider, critRatingSlider, hasteRatingSlider, strengthSlider});

        jLabel22.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        jLabel22.setText("This tab allows you to artificially boost certain stats for your character, note that the stats booster checkbox must be enabled for stats to apply");

        javax.swing.GroupLayout statsBoosterTabLayout = new javax.swing.GroupLayout(statsBoosterTab);
        statsBoosterTab.setLayout(statsBoosterTabLayout);
        statsBoosterTabLayout.setHorizontalGroup(
            statsBoosterTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(statsBoosterTabLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(jLabel22)
                .addContainerGap(207, Short.MAX_VALUE))
            .addGroup(statsBoosterTabLayout.createSequentialGroup()
                .addGap(44, 44, 44)
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(51, 51, 51))
        );
        statsBoosterTabLayout.setVerticalGroup(
            statsBoosterTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(statsBoosterTabLayout.createSequentialGroup()
                .addGap(14, 14, 14)
                .addComponent(jLabel22)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 595, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(12, Short.MAX_VALUE))
        );

        TabbedPane.addTab("Stats Booster", statsBoosterTab);

        jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        jScrollPane2.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        armorDBTable.setModel(new geardatabase.CDBTableModel());
        armorDBTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        armorDBTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                armorDBTableMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(armorDBTable);

        javax.swing.GroupLayout armorDBPanelLayout = new javax.swing.GroupLayout(armorDBPanel);
        armorDBPanel.setLayout(armorDBPanelLayout);
        armorDBPanelLayout.setHorizontalGroup(
            armorDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(armorDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 754, Short.MAX_VALUE)
                .addContainerGap())
        );
        armorDBPanelLayout.setVerticalGroup(
            armorDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(armorDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 493, Short.MAX_VALUE)
                .addContainerGap())
        );

        gearDBTabs.addTab("Armor", armorDBPanel);

        weaponsDBTable.setModel(new geardatabase.CDBTableModel());
        weaponsDBTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        weaponsDBTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                weaponsDBTableMouseClicked(evt);
            }
        });
        jScrollPane3.setViewportView(weaponsDBTable);

        javax.swing.GroupLayout weaponsDBPanelLayout = new javax.swing.GroupLayout(weaponsDBPanel);
        weaponsDBPanel.setLayout(weaponsDBPanelLayout);
        weaponsDBPanelLayout.setHorizontalGroup(
            weaponsDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(weaponsDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 754, Short.MAX_VALUE)
                .addContainerGap())
        );
        weaponsDBPanelLayout.setVerticalGroup(
            weaponsDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(weaponsDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 493, Short.MAX_VALUE)
                .addContainerGap())
        );

        gearDBTabs.addTab("Weapons", weaponsDBPanel);

        gemsDBTable.setModel(new geardatabase.CDBTableModel());
        gemsDBTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        gemsDBTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                gemsDBTableMouseClicked(evt);
            }
        });
        jScrollPane4.setViewportView(gemsDBTable);

        javax.swing.GroupLayout gemsDBPanelLayout = new javax.swing.GroupLayout(gemsDBPanel);
        gemsDBPanel.setLayout(gemsDBPanelLayout);
        gemsDBPanelLayout.setHorizontalGroup(
            gemsDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(gemsDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 754, Short.MAX_VALUE)
                .addContainerGap())
        );
        gemsDBPanelLayout.setVerticalGroup(
            gemsDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(gemsDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 493, Short.MAX_VALUE)
                .addContainerGap())
        );

        gearDBTabs.addTab("Gems", gemsDBPanel);

        addNewItemButton.setText("Add New Item");
        addNewItemButton.setToolTipText("Adds a new item to the database. You can do this by either entering a wowhead item id or a direct item URL link into the dialog box when clicked.");
        addNewItemButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addNewItemButtonActionPerformed(evt);
            }
        });

        jLabel21.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        jLabel21.setText("This tab shows all the items that are available to your character. You can double click on an item to remove it or use the button at the bottom to add an item");

        javax.swing.GroupLayout gearDBPanelLayout = new javax.swing.GroupLayout(gearDBPanel);
        gearDBPanel.setLayout(gearDBPanelLayout);
        gearDBPanelLayout.setHorizontalGroup(
            gearDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(gearDBPanelLayout.createSequentialGroup()
                .addGroup(gearDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(gearDBPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel21, javax.swing.GroupLayout.PREFERRED_SIZE, 769, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(gearDBPanelLayout.createSequentialGroup()
                        .addGap(32, 32, 32)
                        .addComponent(addNewItemButton))
                    .addGroup(gearDBPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(gearDBTabs, javax.swing.GroupLayout.PREFERRED_SIZE, 779, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(19, Short.MAX_VALUE))
        );
        gearDBPanelLayout.setVerticalGroup(
            gearDBPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(gearDBPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel21)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(gearDBTabs, javax.swing.GroupLayout.PREFERRED_SIZE, 543, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(addNewItemButton)
                .addContainerGap(38, Short.MAX_VALUE))
        );

        TabbedPane.addTab("Gear Database", gearDBPanel);

        jLabel24.setFont(new java.awt.Font("Arial Narrow", 0, 11));
        jLabel24.setText("This set of tabs shows the results of a simulation run with various statistics");

        resultsDamageTable.setModel(new dpsresults.CDamageResultTable());
        jScrollPane6.setViewportView(resultsDamageTable);

        procResultsTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null},
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String [] {
                "Proc Source", "Total Procs", "Uptime"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, true, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane7.setViewportView(procResultsTable);
        procResultsTable.getColumnModel().getColumn(2).setHeaderValue("Uptime");

        regenResultsTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Regen Type", "Total Energy"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane8.setViewportView(regenResultsTable);

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 406, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(40, 40, 40)
                        .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 763, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(88, Short.MAX_VALUE))
        );

        overallChartsTabbedPane.addTab("The Numbers", jPanel4);

        overallDamageLabel.setText("Pie1");
        overallDamageLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        javax.swing.GroupLayout jPanel38Layout = new javax.swing.GroupLayout(jPanel38);
        jPanel38.setLayout(jPanel38Layout);
        jPanel38Layout.setHorizontalGroup(
            jPanel38Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel38Layout.createSequentialGroup()
                .addGap(115, 115, 115)
                .addComponent(overallDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 526, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(142, Short.MAX_VALUE))
        );
        jPanel38Layout.setVerticalGroup(
            jPanel38Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel38Layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addComponent(overallDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 469, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(52, Short.MAX_VALUE))
        );

        overallChartsTabbedPane.addTab("Overall Charts", jPanel38);

        poisonDamageLabel.setText("Pie1");
        poisonDamageLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        deadlyPoisonStackTimeDamageLabel.setText("Pie2");
        deadlyPoisonStackTimeDamageLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        deadlyPoisonStackTimeDamageLabel1.setText("Pie3");
        deadlyPoisonStackTimeDamageLabel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        javax.swing.GroupLayout jPanel36Layout = new javax.swing.GroupLayout(jPanel36);
        jPanel36.setLayout(jPanel36Layout);
        jPanel36Layout.setHorizontalGroup(
            jPanel36Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel36Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(poisonDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(deadlyPoisonStackTimeDamageLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 42, Short.MAX_VALUE)
                .addComponent(deadlyPoisonStackTimeDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(23, 23, 23))
        );
        jPanel36Layout.setVerticalGroup(
            jPanel36Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel36Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel36Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(deadlyPoisonStackTimeDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 355, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel36Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(poisonDamageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(deadlyPoisonStackTimeDamageLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(193, Short.MAX_VALUE))
        );

        overallChartsTabbedPane.addTab("Poisons", jPanel36);

        javax.swing.GroupLayout jPanel37Layout = new javax.swing.GroupLayout(jPanel37);
        jPanel37.setLayout(jPanel37Layout);
        jPanel37Layout.setHorizontalGroup(
            jPanel37Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 783, Short.MAX_VALUE)
        );
        jPanel37Layout.setVerticalGroup(
            jPanel37Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 559, Short.MAX_VALUE)
        );

        overallChartsTabbedPane.addTab("Melee Damage", jPanel37);

        iterationsLabel.setText("Iterations:");

        fightLengthLabel.setText("Fight Length:");

        timePerIterationLabel.setText("Time per iteration:");

        totalTimeLabel.setText("Total calculation time: ");

        cpuCountLabel.setText("CPU Count: ");

        javax.swing.GroupLayout iterationPlotPanelLayout = new javax.swing.GroupLayout(iterationPlotPanel);
        iterationPlotPanel.setLayout(iterationPlotPanelLayout);
        iterationPlotPanelLayout.setHorizontalGroup(
            iterationPlotPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 726, Short.MAX_VALUE)
        );
        iterationPlotPanelLayout.setVerticalGroup(
            iterationPlotPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 489, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jPanel39Layout = new javax.swing.GroupLayout(jPanel39);
        jPanel39.setLayout(jPanel39Layout);
        jPanel39Layout.setHorizontalGroup(
            jPanel39Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel39Layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addGroup(jPanel39Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(iterationPlotPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel39Layout.createSequentialGroup()
                        .addComponent(iterationsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(fightLengthLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(27, 27, 27)
                        .addComponent(timePerIterationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(totalTimeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(30, 30, 30)
                        .addComponent(cpuCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 129, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(29, Short.MAX_VALUE))
        );
        jPanel39Layout.setVerticalGroup(
            jPanel39Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel39Layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(iterationPlotPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel39Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(iterationsLabel)
                    .addComponent(totalTimeLabel)
                    .addComponent(fightLengthLabel)
                    .addComponent(cpuCountLabel)
                    .addComponent(timePerIterationLabel))
                .addContainerGap(25, Short.MAX_VALUE))
        );

        overallChartsTabbedPane.addTab("Iteration DPS", jPanel39);

        finisherDistributionLabel.setText("jLabel10");

        javax.swing.GroupLayout jPanel40Layout = new javax.swing.GroupLayout(jPanel40);
        jPanel40.setLayout(jPanel40Layout);
        jPanel40Layout.setHorizontalGroup(
            jPanel40Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel40Layout.createSequentialGroup()
                .addGap(50, 50, 50)
                .addComponent(finisherDistributionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 675, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(58, Short.MAX_VALUE))
        );
        jPanel40Layout.setVerticalGroup(
            jPanel40Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel40Layout.createSequentialGroup()
                .addGap(51, 51, 51)
                .addComponent(finisherDistributionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 423, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(85, Short.MAX_VALUE))
        );

        overallChartsTabbedPane.addTab("Finishers", jPanel40);

        javax.swing.GroupLayout ResultsTabLayout = new javax.swing.GroupLayout(ResultsTab);
        ResultsTab.setLayout(ResultsTabLayout);
        ResultsTabLayout.setHorizontalGroup(
            ResultsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ResultsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(ResultsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(overallChartsTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 788, Short.MAX_VALUE)
                    .addComponent(jLabel24, javax.swing.GroupLayout.PREFERRED_SIZE, 473, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        ResultsTabLayout.setVerticalGroup(
            ResultsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ResultsTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel24)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(overallChartsTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 587, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(28, Short.MAX_VALUE))
        );

        TabbedPane.addTab("Results", ResultsTab);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(topPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(TabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 813, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(topPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 685, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(TabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 674, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void statsBoostCheckBoxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_statsBoostCheckBoxStateChanged
        this.setStats();
        if (this.statsBoostCheckBox.isSelected()) {
            this.statsBoostCheckBox.setForeground(Color.RED);
        } else {
            this.statsBoostCheckBox.setForeground(Color.BLACK);
        }
}//GEN-LAST:event_statsBoostCheckBoxStateChanged

    private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
        CGlobal.g_project.save();
}//GEN-LAST:event_saveButtonActionPerformed

    private void loadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadButtonActionPerformed
        CGlobal.g_project.read();
}//GEN-LAST:event_loadButtonActionPerformed

    private void importPlayerButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importPlayerButtonActionPerformed
        boolean l_result = CImportArmory.importPlayer(this.playerNameTextField.getText(), this.realmTextField.getText(), (String) this.regionComboBox.getSelectedItem());
        setStats();
}//GEN-LAST:event_importPlayerButtonActionPerformed

    private void getDPSButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_getDPSButtonActionPerformed
        dpssystem.CThreadManager.runSimulation(this.standardDeviationTextField, this.totalDPSTextField, this.savedTotalDPSTextField);
}//GEN-LAST:event_getDPSButtonActionPerformed

    private void saveDPSButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveDPSButtonActionPerformed
        CGlobal.g_savedDps = Double.parseDouble(this.totalDPSTextField.getText());
        this.savedTotalDPSTextField.setText(CGlobal.g_savedDps + " (0%)");
}//GEN-LAST:event_saveDPSButtonActionPerformed

    private void addNewItemButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addNewItemButtonActionPerformed
        String l_result = JOptionPane.showInputDialog("Enter the item ID or a html link from Wowhead. You can enter multiple item IDs by seperating them with a ',' character");
        if (l_result != null && !l_result.equals("")) {
            if (l_result.substring(0,4).equals("http"))
            {
                // probably a complete http link
                if (!CGlobal.g_database.addDbItemFromLink(l_result)) {
                    CMessage.showError("Failed to get item");
                } else {
                    CGlobal.g_database.saveDatabase();
                    CGlobal.g_database.setupGearData();
                }
            }
            else
            {
                // Split csv strings so we can import multiple
                // ids
                String [] l_itemIds = null;
                l_itemIds = l_result.split(",");
                for (int i = 0; i < l_itemIds.length; i++)
                {
                    String l_itemId = l_itemIds[i].trim();
                    CStatus.setStatus("Getting item " + l_itemId);
                    CGlobal.g_database.addDbItem(l_itemId, true);
                }

                CStatus.setStatus("Saving database");
                CGlobal.g_database.saveDatabase();
                CGlobal.g_database.setupGearData();
                CStatus.idleStatus();
            }
        }
}//GEN-LAST:event_addNewItemButtonActionPerformed

    private void gemsDBTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_gemsDBTableMouseClicked
        CGlobal.g_database.handleMouseClick(gemsDBTable, evt);
}//GEN-LAST:event_gemsDBTableMouseClicked

    private void weaponsDBTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_weaponsDBTableMouseClicked
        CGlobal.g_database.handleMouseClick(weaponsDBTable, evt);
}//GEN-LAST:event_weaponsDBTableMouseClicked

    private void armorDBTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_armorDBTableMouseClicked
        CGlobal.g_database.handleMouseClick(armorDBTable, evt);
}//GEN-LAST:event_armorDBTableMouseClicked

    private void resetBoostButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetBoostButtonActionPerformed
        this.agilitySlider.setValue(0);
        this.strengthSlider.setValue(0);
        this.hasteRatingSlider.setValue(0);
        this.critRatingSlider.setValue(0);
        this.expertiseRatingSlider.setValue(0);
        this.attackPowerSlider.setValue(0);
        this.armorPenRatingSlider.setValue(0);
        this.hitRatingSlider.setValue(0);
        this.setStats();
}//GEN-LAST:event_resetBoostButtonActionPerformed

    private void expertiseRatingSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_expertiseRatingSliderStateChanged
        expertiseRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Expertise Rating " + expertiseRatingSlider.getValue()));
        m_boostStats.setExpertiseRating(expertiseRatingSlider.getValue());
        this.setStats();
}//GEN-LAST:event_expertiseRatingSliderStateChanged

    private void hitRatingSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_hitRatingSliderStateChanged
        hitRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Hit Rating " + hitRatingSlider.getValue()));
        m_boostStats.setHitRating(hitRatingSlider.getValue());
        this.setStats();
}//GEN-LAST:event_hitRatingSliderStateChanged

    private void critRatingSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_critRatingSliderStateChanged
        critRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Crit Rating " + critRatingSlider.getValue()));
        m_boostStats.setCritRating(critRatingSlider.getValue());
        this.setStats();
}//GEN-LAST:event_critRatingSliderStateChanged

    private void hasteRatingSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_hasteRatingSliderStateChanged
        hasteRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Haste Rating " + hasteRatingSlider.getValue()));
        m_boostStats.setHasteRating(hasteRatingSlider.getValue());
        this.setStats();
}//GEN-LAST:event_hasteRatingSliderStateChanged

    private void strengthSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_strengthSliderStateChanged
        strengthSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Strength " + strengthSlider.getValue()));
        m_boostStats.setStrength(strengthSlider.getValue());
        this.setStats();
}//GEN-LAST:event_strengthSliderStateChanged

    private void attackPowerSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_attackPowerSliderStateChanged
        attackPowerSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Attack Power " + attackPowerSlider.getValue()));
        m_boostStats.setAttackPower(attackPowerSlider.getValue());
        this.setStats();
}//GEN-LAST:event_attackPowerSliderStateChanged

    private void armorPenRatingSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_armorPenRatingSliderStateChanged
        armorPenRatingSlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Armor Pen Rating " + armorPenRatingSlider.getValue()));
        m_boostStats.setArmorPenRating(armorPenRatingSlider.getValue());
        this.setStats();
}//GEN-LAST:event_armorPenRatingSliderStateChanged

    private void agilitySliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_agilitySliderStateChanged
        agilitySlider.setBorder(javax.swing.BorderFactory.createTitledBorder("Agility " + agilitySlider.getValue()));
        m_boostStats.setAgility(agilitySlider.getValue());
        this.setStats();
}//GEN-LAST:event_agilitySliderStateChanged

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        CGlobal.g_raidBuffs.save();
}//GEN-LAST:event_jButton4ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        CGlobal.g_raidBuffs.read();
}//GEN-LAST:event_jButton3ActionPerformed

    private void flaskComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_flaskComboBoxActionPerformed
        this.setStats();
}//GEN-LAST:event_flaskComboBoxActionPerformed

    private void scrollsComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scrollsComboBoxActionPerformed
        this.setStats();
}//GEN-LAST:event_scrollsComboBoxActionPerformed

    private void foodComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_foodComboBoxActionPerformed
        this.setStats();
}//GEN-LAST:event_foodComboBoxActionPerformed

    private void moonkinAuraCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_moonkinAuraCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.elementalOathCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_moonkinAuraCheckBoxItemStateChanged

    private void elementalOathCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_elementalOathCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.moonkinAuraCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_elementalOathCheckBoxItemStateChanged

    private void windfuryTotemCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_windfuryTotemCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.improvedIcyTalonsCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_windfuryTotemCheckBoxItemStateChanged

    private void improvedIcyTalonsCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_improvedIcyTalonsCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.windfuryTotemCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_improvedIcyTalonsCheckBoxItemStateChanged

    private void lotpCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_lotpCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.rampageCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_lotpCheckBoxItemStateChanged

    private void rampageCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_rampageCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.lotpCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_rampageCheckBoxItemStateChanged

    private void heroicPresenceItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_heroicPresenceItemStateChanged
        setStats();
}//GEN-LAST:event_heroicPresenceItemStateChanged

    private void motwCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_motwCheckBoxItemStateChanged
        this.setStats();
}//GEN-LAST:event_motwCheckBoxItemStateChanged

    private void bokCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_bokCheckBoxItemStateChanged
        this.setStats();
}//GEN-LAST:event_bokCheckBoxItemStateChanged

    private void bloodlustCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bloodlustCheckBoxActionPerformed
        this.setStats();
}//GEN-LAST:event_bloodlustCheckBoxActionPerformed

    private void bloodlustCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_bloodlustCheckBoxItemStateChanged
        this.setStats();
}//GEN-LAST:event_bloodlustCheckBoxItemStateChanged

    private void pwfCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_pwfCheckBoxItemStateChanged
        this.setStats();
}//GEN-LAST:event_pwfCheckBoxItemStateChanged

    private void commandingShoutCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_commandingShoutCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.bloodPactCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_commandingShoutCheckBoxItemStateChanged

    private void bloodPactCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_bloodPactCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.commandingShoutCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_bloodPactCheckBoxItemStateChanged

    private void swiftRetributionCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_swiftRetributionCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.improvedMoonkinFormCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_swiftRetributionCheckBoxItemStateChanged

    private void improvedMoonkinFormCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_improvedMoonkinFormCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.swiftRetributionCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_improvedMoonkinFormCheckBoxItemStateChanged

    private void ferociousInspirationCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_ferociousInspirationCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.sanctifiedRetributionCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_ferociousInspirationCheckBoxItemStateChanged

    private void sanctifiedRetributionCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sanctifiedRetributionCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.ferociousInspirationCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_sanctifiedRetributionCheckBoxItemStateChanged

    private void abominationsMightCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_abominationsMightCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.trueShotAuraCheckBox.setSelected(false);
            this.unleashedRageCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_abominationsMightCheckBoxItemStateChanged

    private void unleashedRageCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_unleashedRageCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.abominationsMightCheckBox.setSelected(false);
            this.trueShotAuraCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_unleashedRageCheckBoxItemStateChanged

    private void trueShotAuraCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_trueShotAuraCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.abominationsMightCheckBox.setSelected(false);
            this.unleashedRageCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_trueShotAuraCheckBoxItemStateChanged

    private void battleShoutCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_battleShoutCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.bomCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_battleShoutCheckBoxItemStateChanged

    private void bomCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_bomCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.battleShoutCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_bomCheckBoxItemStateChanged

    private void hornOfWinterCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_hornOfWinterCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.strengthOfEarthCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_hornOfWinterCheckBoxItemStateChanged

    private void strengthOfEarthCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_strengthOfEarthCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.hornOfWinterCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_strengthOfEarthCheckBoxItemStateChanged

    private void miseryCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_miseryCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.improvedFaerieFireCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_miseryCheckBoxItemStateChanged

    private void improvedFaerieFireCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_improvedFaerieFireCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.miseryCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_improvedFaerieFireCheckBoxItemStateChanged

    private void ebonPlagueBringerCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_ebonPlagueBringerCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.coeCheckBox.setSelected(false);
            this.earthAndMoonCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_ebonPlagueBringerCheckBoxItemStateChanged

    private void earthAndMoonCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_earthAndMoonCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.ebonPlagueBringerCheckBox.setSelected(false);
            this.coeCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_earthAndMoonCheckBoxItemStateChanged

    private void coeCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_coeCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.ebonPlagueBringerCheckBox.setSelected(false);
            this.earthAndMoonCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_coeCheckBoxItemStateChanged

    private void improvedScorchCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_improvedScorchCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.wintersChillCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_improvedScorchCheckBoxItemStateChanged

    private void wintersChillCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_wintersChillCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.improvedScorchCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_wintersChillCheckBoxItemStateChanged

    private void savageCombatCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_savageCombatCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.bloodFrenzyCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_savageCombatCheckBoxItemStateChanged

    private void bloodFrenzyCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_bloodFrenzyCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.savageCombatCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_bloodFrenzyCheckBoxItemStateChanged

    private void totemOfWrathCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_totemOfWrathCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.masterPoisonerCheckBox.setSelected(false);
            this.hotcCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_totemOfWrathCheckBoxItemStateChanged

    private void hotcCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_hotcCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.masterPoisonerCheckBox.setSelected(false);
            this.totemOfWrathCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_hotcCheckBoxItemStateChanged

    private void masterPoisonerCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_masterPoisonerCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.hotcCheckBox.setSelected(false);
            this.totemOfWrathCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_masterPoisonerCheckBoxItemStateChanged

    private void mangleCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_mangleCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.traumaCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_mangleCheckBoxItemStateChanged

    private void traumaCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_traumaCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.mangleCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_traumaCheckBoxItemStateChanged

    private void stingCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_stingCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.faerieFireCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_stingCheckBoxItemStateChanged

    private void faerieFireCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_faerieFireCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.stingCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_faerieFireCheckBoxItemStateChanged

    private void sunderArmorCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sunderArmorCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.exposeArmorCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_sunderArmorCheckBoxItemStateChanged

    private void exposeArmorCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_exposeArmorCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.sunderArmorCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_exposeArmorCheckBoxItemStateChanged

    private void savePaperDollButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_savePaperDollButtonActionPerformed
        CGlobal.g_paperDoll.save();
}//GEN-LAST:event_savePaperDollButtonActionPerformed

    private void loadPaperDollButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadPaperDollButtonActionPerformed
        CGlobal.g_paperDoll.read();
}//GEN-LAST:event_loadPaperDollButtonActionPerformed

    private void raceComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_raceComboBoxActionPerformed
        // New race selected
        JComboBox cb = (JComboBox)evt.getSource();
        CGlobal.g_paperDoll.setRace((String) cb.getSelectedItem());
        setStats();
}//GEN-LAST:event_raceComboBoxActionPerformed

    private void professionBComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_professionBComboBoxActionPerformed
        CGlobal.g_paperDoll.setProfession((String) professionBComboBox.getSelectedItem(), 1, false);
        setStats();
}//GEN-LAST:event_professionBComboBoxActionPerformed

    private void professionAComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_professionAComboBoxItemStateChanged
        CGlobal.g_paperDoll.setProfession((String) professionAComboBox.getSelectedItem(), 0, false);
        setStats();
}//GEN-LAST:event_professionAComboBoxItemStateChanged

    private void paperDollTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_paperDollTableMouseClicked
        if (evt.getClickCount() > 1) {
            int row = paperDollTable.rowAtPoint(new Point(evt.getX(), evt.getY()));
            int col = paperDollTable.convertColumnIndexToModel(paperDollTable.columnAtPoint(new Point(evt.getX(), evt.getY())));
            if (col == 0) {
                // No editing of Slot column
                return;
            }

            CGlobal.g_paperDoll.itemChooser(row);
        }
}//GEN-LAST:event_paperDollTableMouseClicked

    private void calculateCritsPerSecondButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_calculateCritsPerSecondButtonActionPerformed
        String l_timeLength = this.fightTimeCalcFormattedTextField.getText();
        String l_crits = this.numberOfCritsCalcFormattedTextField.getText();

        if (l_timeLength.equals("") || l_timeLength.equals("0"))
        {
            CMessage.showError("Fight length must have a value of have a time greater than 0!");
            return;
        }

        if (l_crits.equals("") || l_crits.equals("0"))
        {
            CMessage.showError("Number of Crits must have a value or be greater than 0!");
            return;
        }

        String l_result = String.valueOf(CUtil.trunc3(Double.parseDouble(l_crits) / Double.parseDouble(l_timeLength)));
        this.calcCPSTextField.setText(l_result);
        if (this.copyCPStoClipboardCheckBox.isSelected())
        {
            CUtility.writeToClipboard(l_result);
        }
}//GEN-LAST:event_calculateCritsPerSecondButtonActionPerformed

    private void savePlayStyleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_savePlayStyleButtonActionPerformed
        CGlobal.g_playStyle.save();
}//GEN-LAST:event_savePlayStyleButtonActionPerformed

    private void loadPlayStyleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadPlayStyleButtonActionPerformed
        CGlobal.g_playStyle.read();
    }//GEN-LAST:event_loadPlayStyleButtonActionPerformed

    private void hat1ClassComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hat1ClassComboBoxActionPerformed
    
    }//GEN-LAST:event_hat1ClassComboBoxActionPerformed

    private void hat2ClassComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hat2ClassComboBoxActionPerformed
 
    }//GEN-LAST:event_hat2ClassComboBoxActionPerformed

    private void hat3ClassComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hat3ClassComboBoxActionPerformed
 
    }//GEN-LAST:event_hat3ClassComboBoxActionPerformed

    private void hat4ClassComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hat4ClassComboBoxActionPerformed

    }//GEN-LAST:event_hat4ClassComboBoxActionPerformed

    private void loadHATButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadHATButtonActionPerformed
        CGlobal.g_HAT.read();
    }//GEN-LAST:event_loadHATButtonActionPerformed

    private void saveHATButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveHATButtonActionPerformed
        CGlobal.g_HAT.save();
    }//GEN-LAST:event_saveHATButtonActionPerformed

    private void cowCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cowCheckBoxItemStateChanged
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            this.m_initialising = true;
            this.faerieFireCheckBox.setSelected(false);
            this.stingCheckBox.setSelected(false);
            this.m_initialising = false;
        }
        this.setStats();
}//GEN-LAST:event_cowCheckBoxItemStateChanged

    private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testButtonActionPerformed
        // TODO add your handling code here:
        CGlobal.g_playStyle.testButton();
    }//GEN-LAST:event_testButtonActionPerformed

    
    public JTable getPaperDollTable()
    {
        return this.paperDollTable;
    }

    public void setStats()
    {
        if (m_initialising)
        {
            return;
        }

        int l_health;
        double l_strength;
        double l_agility;
        int l_stamina;
        double l_attackPower;
        int l_hitRating;
        double l_hitChance;
        double l_spellHitChance;
        int l_critRating;
        double l_MHCritChance;
        double l_OHCritChance;
        double l_spellCritChance;
        int l_armorPenRating;
        int l_expertiseRating;
        double l_expertiseDodge;
        int l_hasteRating;
        double l_hastePercent;

        CStats l_totalStats = CGlobal.g_paperDoll.getTotalStats();
        l_totalStats.add(CGlobal.g_raidBuffs.getTotalStats()); // Flat stats
        CDPSRaidBuff l_raidBuff = new CDPSRaidBuff(CGlobal.g_raidBuffs);

        l_health = 7424 + (l_totalStats.m_stamina * 10);
        // Strength = (race stats + gear stats + (motw (52)) + (Agi/Str (178)) + (agility food (25) + procs)) *
        // (1.0 + Bok multiplier (0.10))
        l_strength = ((double) l_totalStats.m_strength) * (1.0 + l_raidBuff.getStatsMult());

        // Agility = (Gear + (Agility/Str buff) + (motw 52) + (Agility Food 40) + proc) *
        //           (1 + sinister calling * 3) * (1 + Blessing of Kings (10%))
        l_agility = l_totalStats.m_agility;
        l_agility *= (1.0 + ((double) CGlobal.g_talents.getTalent("Sinister Calling").getCurrentPoints() * 0.03)) * 
                     (1.0 + l_raidBuff.getStatsMult());

        l_stamina = l_totalStats.m_stamina;

        // Attack power = strength + agility +
        //    floor(gear attack power + 140 + attack power flat (688) + attack power food + flask of endless rage) *
        //    (1 + Deadlyness + Savage Combat) * (1 + Attack Power Multiplier(10%));
        l_attackPower = l_agility +
                        l_strength +
                        l_totalStats.m_attackPower;

        l_attackPower *= (1.0 + ((
                (double) (CGlobal.g_talents.getTalent("Savage Combat").getCurrentPoints() * 2) +
                         (CGlobal.g_talents.getTalent("Deadliness").getCurrentPoints() * 2)) * 0.01)) *
                         (1.0 + l_raidBuff.getAttackPowerMult());

        l_hitRating = l_totalStats.m_hitRating;
        l_hitChance = CUtil.getHitRatingToHit(l_hitRating) +
                (double) CGlobal.g_talents.getTalent("Precision").getCurrentPoints();
        if (CGlobal.g_raidBuffs.getValue(RaidBuff.HEROIC_PRESENCE))
        {
            l_hitChance += 1.0;
        }

        l_spellHitChance = CUtil.getHitRatingToSpellHit(l_hitRating) +
                                (double) CGlobal.g_talents.getTalent("Precision").getCurrentPoints();
        if (CGlobal.g_raidBuffs.getValue(RaidBuff.MISERY) || CGlobal.g_raidBuffs.getValue(RaidBuff.IMPROVED_FAERIE_FIRE))
        {
            l_spellHitChance += 3.0;
        }

        if (CGlobal.g_raidBuffs.getValue(RaidBuff.HEROIC_PRESENCE))
        {
            l_spellHitChance += 1.0;
        }

        // =(crit rating /(14*3.279)+ malice + (agi / 83.333) - 0.295)/100 + lotp + hotc - (8*0.006)
        l_critRating = l_totalStats.m_critRating;
        double l_critChance = CUtil.getCritRatingToCrit(l_critRating) +
                (double) CGlobal.g_talents.getTalent("Malice").getCurrentPoints() +
                CUtil.getAgiToCrit(l_agility) +
                -0.295 +
                //(-8 * 0.006) + // Use for simulation against level 83 boss
                (l_raidBuff.getMeleeCritBuff() * 100) +
                (l_raidBuff.getPhysicalCrit() * 100); // Watch out for master poisoner

        l_MHCritChance = l_critChance;
        ItemType l_mainHand = CGlobal.g_paperDoll.getSlot(DollSlotType.MAINHAND).getItem().getItemType();
        if (l_mainHand == ItemType.FIST || l_mainHand == ItemType.DAGGER)
        {
            l_MHCritChance = l_critChance + (double) CGlobal.g_talents.getTalent("Close Quarters Combat").getCurrentPoints();
        }

        l_OHCritChance = l_critChance;
        ItemType l_offHand = CGlobal.g_paperDoll.getSlot(DollSlotType.OFFHAND).getItem().getItemType();
        if (l_offHand == ItemType.FIST || l_offHand == ItemType.DAGGER)
        {
            l_OHCritChance = l_critChance + (double) CGlobal.g_talents.getTalent("Close Quarters Combat").getCurrentPoints();
        }

        // Spell Crit = crit_rating/45.90958/100 + critbuff (3%) + spell crit buff(5%) + moonkin buff(5%) - 2.1%
        l_spellCritChance = CUtil.getCritRatingToSpellCrit(l_critRating) +
                            (l_raidBuff.getPhysicalCrit() * 100) + // 3%
                            (l_raidBuff.getSpellCrit() * 100) + // 2%
                            (l_raidBuff.getSpellCritBuff() * 100) + // 5%
                            -2.1; // crit depression

        l_armorPenRating = l_totalStats.m_armorPenRating;
        l_expertiseRating = l_totalStats.m_expertiseRating;
        l_expertiseDodge = CUtil.getExpToDodgeParryReduction(
                                    CUtil.getExpRatingToExp(l_expertiseRating) + (double) (CGlobal.g_talents.getTalent("Weapon Expertise").getCurrentPoints() * 5.0)
                                    );

        // Haste = 1 + (hasteRating / 32.79 / 100) * (1 + WF) * (1 + RetrBuff) * (Lightning reflexes (0/4/7/10)
        int l_lightningReflexes = CGlobal.g_talents.getTalent("Lightning Reflexes").getCurrentPoints();
        if (l_lightningReflexes == 1)
        {
            l_lightningReflexes = 4;
        } else if (l_lightningReflexes == 2)
        {
            l_lightningReflexes = 7;
        } else if (l_lightningReflexes == 3)
        {
            l_lightningReflexes = 10;
        }
        
        l_hasteRating = l_totalStats.m_hasteRating;
        l_hastePercent = CUtil.getHasteRatingToHaste(l_hasteRating) * 
                         (1.0 + l_raidBuff.getMeleeHaste()) *
                         (1.0 + l_raidBuff.getHaste()) *
                         (1.0 + (((double) l_lightningReflexes) * 0.01));


        this.setStatsRow(0, new CPlayerTableStat(Integer.toString(l_health)));
        this.setStatsRow(1, new CPlayerTableStat(Double.toString(CUtil.trunc(l_strength))));
        this.setStatsRow(2, new CPlayerTableStat(Double.toString(CUtil.trunc(l_agility))));
        this.setStatsRow(3, new CPlayerTableStat(Integer.toString(l_stamina)));
        this.setStatsRow(4, new CPlayerTableStat(Double.toString(CUtil.trunc(l_attackPower))));
        this.setStatsRow(5, new CPlayerTableStat(Integer.toString(l_hitRating)));

        if (l_hitChance < 8.0)
        {
            // Less than the 8% special hit cap
            this.setStatsRow(6, new CPlayerTableStat(CUtil.trunc2(l_hitChance) + "%", "Warning, you are under the 8% special attack hit cap", Color.RED));
        }
        else
        {
            this.setStatsRow(6, new CPlayerTableStat(CUtil.trunc2(l_hitChance) + "%"));
        }

        if (l_spellHitChance >= 17.04)
        {
            // Over the spell hit cap
            this.setStatsRow(7, new CPlayerTableStat(CUtil.trunc2(l_spellHitChance) + "%", "Over spell hit cap of 17% !!", Color.YELLOW));
        }
        else
        {
            this.setStatsRow(7, new CPlayerTableStat(CUtil.trunc2(l_spellHitChance) + "%"));
        }

        this.setStatsRow(8, new CPlayerTableStat(Integer.toString(l_critRating)));
        this.setStatsRow(9, new CPlayerTableStat(CUtil.trunc2(l_MHCritChance) + "%"));
        this.setStatsRow(10, new CPlayerTableStat(CUtil.trunc2(l_OHCritChance) + "%"));
        this.setStatsRow(11, new CPlayerTableStat(CUtil.trunc2(l_spellCritChance) + "%"));
        this.setStatsRow(12, new CPlayerTableStat(Integer.toString(l_armorPenRating)));
        this.setStatsRow(13, new CPlayerTableStat(Integer.toString(l_expertiseRating)));
        if (l_expertiseDodge >= 6.26)
        {
            this.setStatsRow(14, new CPlayerTableStat(CUtil.trunc2(l_expertiseDodge) + "%", "Over the experise cap !!", Color.RED));
        }
        else
        {
            this.setStatsRow(14, new CPlayerTableStat(CUtil.trunc2(l_expertiseDodge) + "%"));
        }

        this.setStatsRow(15, new CPlayerTableStat(Integer.toString(l_hasteRating) +
                                " (" + CUtil.trunc2(l_hastePercent) + "%)"));

    }

    private void setStatsRow(int p_row, CPlayerTableStat p_stat)
    {
        this.statsTable.getModel().setValueAt(p_stat, p_row, 1);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel BuffsTab;
    private javax.swing.JPanel GearTab;
    private javax.swing.JPanel ResultsTab;
    private javax.swing.JTabbedPane TabbedPane;
    private javax.swing.JPanel TalentsTab;
    private javax.swing.JCheckBox abominationsMightCheckBox;
    private javax.swing.JButton addNewItemButton;
    private javax.swing.JSlider agilitySlider;
    private javax.swing.JPanel armorDBPanel;
    private javax.swing.JTable armorDBTable;
    private javax.swing.JSlider armorPenRatingSlider;
    private javax.swing.JSlider attackPowerSlider;
    private javax.swing.JCheckBox battleShoutCheckBox;
    private javax.swing.JCheckBox bloodFrenzyCheckBox;
    private javax.swing.JCheckBox bloodPactCheckBox;
    private javax.swing.JCheckBox bloodlustCheckBox;
    private javax.swing.JCheckBox bokCheckBox;
    private javax.swing.JCheckBox bomCheckBox;
    private javax.swing.JTextField calcCPSTextField;
    private javax.swing.JButton calculateCritsPerSecondButton;
    private javax.swing.JCheckBox coeCheckBox;
    private javax.swing.JCheckBox commandingShoutCheckBox;
    private javax.swing.JCheckBox copyCPStoClipboardCheckBox;
    private javax.swing.JCheckBox cowCheckBox;
    public javax.swing.JLabel cpuCountLabel;
    private javax.swing.JSlider critRatingSlider;
    private javax.swing.JLabel deadlyPoisonStackTimeDamageLabel;
    private javax.swing.JLabel deadlyPoisonStackTimeDamageLabel1;
    private javax.swing.JPanel dpsPanel;
    private javax.swing.JCheckBox earthAndMoonCheckBox;
    private javax.swing.JCheckBox ebonPlagueBringerCheckBox;
    private javax.swing.JCheckBox elementalOathCheckBox;
    private javax.swing.JSlider expertiseRatingSlider;
    private javax.swing.JCheckBox exposeArmorCheckBox;
    private javax.swing.JCheckBox faerieFireCheckBox;
    private javax.swing.JCheckBox ferociousInspirationCheckBox;
    public javax.swing.JLabel fightLengthLabel;
    private javax.swing.JFormattedTextField fightTimeCalcFormattedTextField;
    private javax.swing.JLabel finisherDistributionLabel;
    private javax.swing.JComboBox flaskComboBox;
    private javax.swing.JComboBox foodComboBox;
    private javax.swing.JPanel gearDBPanel;
    private javax.swing.JTabbedPane gearDBTabs;
    private javax.swing.JPanel gemsDBPanel;
    private javax.swing.JTable gemsDBTable;
    private javax.swing.JButton getDPSButton;
    private javax.swing.JSlider hasteRatingSlider;
    private javax.swing.JFormattedTextField hat1CPSFormattedTextField;
    private javax.swing.JComboBox hat1ClassComboBox;
    private javax.swing.JFormattedTextField hat2CPSFormattedTextField;
    private javax.swing.JComboBox hat2ClassComboBox;
    private javax.swing.JFormattedTextField hat3CPSFormattedTextField;
    private javax.swing.JComboBox hat3ClassComboBox;
    private javax.swing.JFormattedTextField hat4CPSFormattedTextField;
    private javax.swing.JComboBox hat4ClassComboBox;
    private javax.swing.JCheckBox heroicPresence;
    private javax.swing.JSlider hitRatingSlider;
    private javax.swing.JCheckBox hornOfWinterCheckBox;
    private javax.swing.JCheckBox hotcCheckBox;
    private javax.swing.JButton importPlayerButton;
    private javax.swing.JCheckBox improvedFaerieFireCheckBox;
    private javax.swing.JCheckBox improvedIcyTalonsCheckBox;
    private javax.swing.JCheckBox improvedMoonkinFormCheckBox;
    private javax.swing.JCheckBox improvedScorchCheckBox;
    private javax.swing.JPanel iterationPlotPanel;
    public javax.swing.JLabel iterationsLabel;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel21;
    private javax.swing.JLabel jLabel22;
    private javax.swing.JLabel jLabel24;
    private javax.swing.JLabel jLabel25;
    private javax.swing.JLabel jLabel27;
    private javax.swing.JLabel jLabel28;
    private javax.swing.JLabel jLabel29;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLayeredPane jLayeredPane1;
    private javax.swing.JPanel jPanel10;
    private javax.swing.JPanel jPanel11;
    private javax.swing.JPanel jPanel12;
    private javax.swing.JPanel jPanel13;
    private javax.swing.JPanel jPanel14;
    private javax.swing.JPanel jPanel15;
    private javax.swing.JPanel jPanel16;
    private javax.swing.JPanel jPanel17;
    private javax.swing.JPanel jPanel18;
    private javax.swing.JPanel jPanel19;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel20;
    private javax.swing.JPanel jPanel21;
    private javax.swing.JPanel jPanel22;
    private javax.swing.JPanel jPanel23;
    private javax.swing.JPanel jPanel24;
    private javax.swing.JPanel jPanel25;
    private javax.swing.JPanel jPanel26;
    private javax.swing.JPanel jPanel27;
    private javax.swing.JPanel jPanel28;
    private javax.swing.JPanel jPanel29;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel30;
    private javax.swing.JPanel jPanel31;
    private javax.swing.JPanel jPanel34;
    private javax.swing.JPanel jPanel36;
    private javax.swing.JPanel jPanel37;
    private javax.swing.JPanel jPanel38;
    private javax.swing.JPanel jPanel39;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel40;
    private javax.swing.JPanel jPanel41;
    private javax.swing.JPanel jPanel42;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JScrollPane jScrollPane9;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JPanel leftPanel;
    private javax.swing.JButton loadButton;
    private javax.swing.JButton loadHATButton;
    private javax.swing.JButton loadPaperDollButton;
    private javax.swing.JButton loadPlayStyleButton;
    private javax.swing.JCheckBox lotpCheckBox;
    private javax.swing.JCheckBox mangleCheckBox;
    private javax.swing.JCheckBox masterPoisonerCheckBox;
    private javax.swing.JCheckBox miseryCheckBox;
    private javax.swing.JCheckBox moonkinAuraCheckBox;
    private javax.swing.JCheckBox motwCheckBox;
    private javax.swing.JCheckBox murderableCheckBox;
    private javax.swing.JFormattedTextField numberOfCritsCalcFormattedTextField;
    private javax.swing.JTabbedPane overallChartsTabbedPane;
    private javax.swing.JLabel overallDamageLabel;
    private javax.swing.JPanel paperDollComboBoxesPanel;
    private javax.swing.JLabel paperDollDescLabel;
    private javax.swing.JScrollPane paperDollScrollPane;
    private javax.swing.JTable paperDollTable;
    private javax.swing.JTextArea playStyleTextArea;
    private javax.swing.JPanel playerDetailsPanel;
    public javax.swing.JTextField playerNameTextField;
    private javax.swing.JLabel poisonDamageLabel;
    private javax.swing.JTable procResultsTable;
    public javax.swing.JComboBox professionAComboBox;
    public javax.swing.JComboBox professionBComboBox;
    private javax.swing.JLabel professionsLabel;
    private javax.swing.JCheckBox pwfCheckBox;
    public javax.swing.JComboBox raceComboBox;
    private javax.swing.JLabel raceLabel;
    private javax.swing.JCheckBox rampageCheckBox;
    public javax.swing.JTextField realmTextField;
    private javax.swing.JTable regenResultsTable;
    public javax.swing.JComboBox regionComboBox;
    private javax.swing.JButton resetBoostButton;
    private javax.swing.JTable resultsDamageTable;
    private javax.swing.JCheckBox sanctifiedRetributionCheckBox;
    private javax.swing.JCheckBox savageCombatCheckBox;
    private javax.swing.JButton saveButton;
    private javax.swing.JButton saveDPSButton;
    private javax.swing.JButton saveHATButton;
    private javax.swing.JButton savePaperDollButton;
    private javax.swing.JButton savePlayStyleButton;
    private javax.swing.JTextField savedTotalDPSTextField;
    private javax.swing.JComboBox scrollsComboBox;
    private javax.swing.JTextField standardDeviationTextField;
    public javax.swing.JCheckBox statsBoostCheckBox;
    private javax.swing.JPanel statsBoosterTab;
    private javax.swing.JTable statsTable;
    private javax.swing.JPanel statusPanel;
    private javax.swing.JLabel statusText;
    private javax.swing.JCheckBox stingCheckBox;
    private javax.swing.JCheckBox strengthOfEarthCheckBox;
    private javax.swing.JSlider strengthSlider;
    private javax.swing.JCheckBox sunderArmorCheckBox;
    private javax.swing.JCheckBox swiftRetributionCheckBox;
    private javax.swing.JButton testButton;
    public javax.swing.JLabel timePerIterationLabel;
    private javax.swing.JPanel topPanel;
    private javax.swing.JTextField totalDPSTextField;
    public javax.swing.JLabel totalTimeLabel;
    private javax.swing.JCheckBox totemOfWrathCheckBox;
    private javax.swing.JCheckBox traumaCheckBox;
    private javax.swing.JCheckBox trueShotAuraCheckBox;
    private javax.swing.JCheckBox unleashedRageCheckBox;
    private javax.swing.JPanel weaponsDBPanel;
    private javax.swing.JTable weaponsDBTable;
    private javax.swing.JCheckBox windfuryTotemCheckBox;
    private javax.swing.JCheckBox wintersChillCheckBox;
    // End of variables declaration//GEN-END:variables
}
